[tbb] 23/64: Imported Upstream version 3.0+r035

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

    Imported Upstream version 3.0+r035
---
 CHANGES                                            |  Bin 32869 -> 34382 bytes
 build/FreeBSD.inc                                  |    1 +
 build/Makefile.tbbmalloc                           |   17 +-
 build/Makefile.test                                |    4 +-
 build/SunOS.inc                                    |    1 +
 build/common_rules.inc                             |    4 +
 build/linux.gcc.inc                                |    1 +
 build/linux.icc.inc                                |    1 +
 build/linux.inc                                    |   18 +-
 build/macos.gcc.inc                                |    2 +-
 build/windows.gcc.inc                              |    4 +-
 doc/html/a00001.html                               |    6 +-
 doc/html/a00002.html                               |    6 +-
 doc/html/a00003.html                               |    6 +-
 doc/html/a00004.html                               |   28 +-
 doc/html/a00005.html                               |   20 +-
 doc/html/a00006.html                               |   24 +-
 doc/html/a00007.html                               |   36 +-
 doc/html/a00009.html                               |    8 +-
 doc/html/a00011.html                               |   22 +-
 doc/html/a00013.html                               |  128 +-
 doc/html/a00015.html                               |   12 +-
 doc/html/a00016.html                               |   20 +-
 doc/html/a00017.html                               |   16 +-
 doc/html/a00018.html                               |   48 +-
 doc/html/a00019.html                               |   56 +-
 doc/html/a00021.html                               |   74 +-
 doc/html/a00026.html                               |  142 +-
 doc/html/a00031.html                               |   70 +-
 doc/html/a00042.html                               |    4 +-
 doc/html/a00046.html                               |   10 +-
 doc/html/a00048.html                               |   14 +-
 doc/html/a00049.html                               |   22 +-
 doc/html/a00050.html                               |   16 +-
 doc/html/{a00002.html => a00052.html}              |    6 +-
 doc/html/a00053.html                               |   20 +-
 doc/html/a00076.html                               |    2 +-
 doc/html/a00094.html                               |    6 +-
 doc/html/a00099.html                               |   24 +-
 doc/html/a00102.html                               |   10 +-
 doc/html/{a00141.html => a00140.html}              |    6 +-
 doc/html/a00141.html                               |   43 +-
 doc/html/a00142.html                               |   36 +-
 doc/html/a00143.html                               |   31 +-
 doc/html/a00144.html                               |   33 +-
 doc/html/a00145.html                               |   37 +-
 doc/html/a00146.html                               |   34 +-
 doc/html/a00147.html                               |  192 ++-
 doc/html/a00148.html                               |  204 +--
 doc/html/a00149.html                               |   65 +-
 doc/html/a00150.html                               |   99 +-
 doc/html/a00151.html                               |   83 +-
 doc/html/a00152.html                               |  134 +-
 doc/html/{a00153.png => a00152.png}                |  Bin
 doc/html/a00153.html                               |  141 +-
 doc/html/a00154.html                               |  288 +++-
 doc/html/{a00155.png => a00154.png}                |  Bin
 doc/html/a00155.html                               |  610 +++++++--
 doc/html/a00156.html                               |  622 +--------
 doc/html/{a00157.png => a00156.png}                |  Bin
 doc/html/a00157.html                               |   48 +-
 doc/html/a00158.html                               |   65 +-
 doc/html/{a00159.png => a00158.png}                |  Bin
 doc/html/a00159.html                               |  158 ++-
 doc/html/a00160.html                               |  163 +--
 doc/html/{a00161.png => a00160.png}                |  Bin
 doc/html/a00161.html                               |  564 +++++++-
 doc/html/a00162.html                               |  570 +-------
 doc/html/{a00163.png => a00162.png}                |  Bin
 doc/html/a00163.html                               |  171 ++-
 doc/html/a00164.html                               |  243 ++--
 doc/html/{a00165.png => a00164.png}                |  Bin
 doc/html/a00165.html                               |  134 +-
 doc/html/a00166.html                               |   50 +-
 doc/html/a00167.html                               |   29 +-
 doc/html/a00168.html                               |    4 +-
 doc/html/a00169.html                               |    4 +-
 doc/html/a00170.html                               |    4 +-
 doc/html/a00171.html                               |    4 +-
 doc/html/a00172.html                               |    6 +-
 doc/html/a00173.html                               |    4 +-
 doc/html/a00174.html                               |    6 +-
 doc/html/a00175.html                               |    4 +-
 doc/html/a00176.html                               |    6 +-
 doc/html/a00177.html                               |    4 +-
 doc/html/a00178.html                               |    4 +-
 doc/html/a00179.html                               |    6 +-
 doc/html/a00180.html                               |   12 +-
 doc/html/a00181.html                               |    6 +-
 doc/html/a00182.html                               |    6 +-
 doc/html/a00183.html                               |    4 +-
 doc/html/a00184.html                               |    6 +-
 doc/html/a00185.html                               |    4 +-
 doc/html/a00186.html                               |    6 +-
 doc/html/a00187.html                               |    4 +-
 doc/html/a00188.html                               |    4 +-
 doc/html/a00189.html                               |    6 +-
 doc/html/a00190.html                               |    4 +-
 doc/html/a00191.html                               |    6 +-
 doc/html/a00192.html                               |    6 +-
 doc/html/a00193.html                               |    6 +-
 doc/html/a00194.html                               |    6 +-
 doc/html/a00195.html                               |    4 +-
 doc/html/a00196.html                               |    6 +-
 doc/html/a00197.html                               |    4 +-
 doc/html/a00198.html                               |    6 +-
 doc/html/a00199.html                               |    8 +-
 doc/html/a00200.html                               |    4 +-
 doc/html/a00201.html                               |    6 +-
 doc/html/a00202.html                               |    6 +-
 doc/html/a00203.html                               |    6 +-
 doc/html/a00204.html                               |    6 +-
 doc/html/a00205.html                               |    6 +-
 doc/html/a00206.html                               |   14 +-
 doc/html/a00207.html                               |    6 +-
 doc/html/a00208.html                               |    4 +-
 doc/html/a00209.html                               |    8 +-
 doc/html/a00210.html                               |    6 +-
 doc/html/a00211.html                               |    4 +-
 doc/html/a00212.html                               |    4 +-
 doc/html/a00213.html                               |    6 +-
 doc/html/a00214.html                               |    6 +-
 doc/html/a00248.html                               |   20 +-
 doc/html/a00267.html                               |  194 +--
 doc/html/a00273.html                               |   61 -
 doc/html/a00274.html                               |  345 +----
 doc/html/a00275.html                               |  326 ++++-
 doc/html/a00276.html                               |  295 +---
 doc/html/a00277.html                               |  298 +++-
 doc/html/a00278.html                               |   35 +-
 doc/html/a00279.html                               |   20 +-
 doc/html/a00280.html                               |  939 +------------
 doc/html/{a00280.html => a00281.html}              |    8 +-
 doc/html/{a00298.html => a00299.html}              | 1420 ++++++++++----------
 doc/html/{a00308.html => a00309.html}              |    0
 doc/html/a00310.html                               |   73 -
 doc/html/a00311.html                               |  374 +-----
 doc/html/{a00311.html => a00312.html}              |   12 +-
 doc/html/a00319.html                               |  127 --
 doc/html/a00320.html                               |  134 +-
 doc/html/a00321.html                               |  126 +-
 doc/html/a00322.html                               |  161 ++-
 doc/html/{a00322.html => a00323.html}              |   26 +-
 doc/html/a00324.html                               |   98 --
 doc/html/a00325.html                               | 1253 +----------------
 doc/html/{a00325.html => a00326.html}              |  186 +--
 doc/html/a00335.html                               |  365 -----
 doc/html/a00336.html                               |  510 ++++---
 doc/html/{a00336.html => a00337.html}              |    0
 doc/html/{a00341.html => a00342.html}              |  124 +-
 doc/html/{a00350.html => a00351.html}              |    0
 doc/html/a00353.html                               | 1019 --------------
 doc/html/a00354.html                               |  970 +++++++++++++
 doc/html/{a00362.html => a00367.html}              |   12 +-
 doc/html/{a00364.html => a00369.html}              |    0
 doc/html/{a00365.html => a00370.html}              |    0
 doc/html/{a00366.html => a00371.html}              |    4 +-
 doc/html/{a00375.html => a00380.html}              |   38 +-
 doc/html/{a00379.html => a00384.html}              |    8 +-
 doc/html/{a00381.html => a00386.html}              |   36 +-
 doc/html/a00391.html                               |  341 -----
 doc/html/{a00387.html => a00392.html}              |   44 +-
 doc/html/a00396.html                               |  464 ++++---
 doc/html/{a00396.html => a00401.html}              |   14 +-
 doc/html/a00404.html                               |  232 ----
 doc/html/{a00400.html => a00405.html}              |    4 +-
 doc/html/a00409.html                               |  611 +++------
 doc/html/a00414.html                               |  507 +++++++
 doc/html/a00420.html                               |  136 --
 doc/html/a00421.html                               |  168 ---
 doc/html/a00426.html                               |  243 ++--
 doc/html/a00427.html                               |  706 ++--------
 doc/html/{a00422.html => a00428.html}              |    4 +-
 doc/html/{a00423.html => a00429.html}              |   12 +-
 doc/html/{a00424.html => a00430.html}              |   22 +-
 doc/html/{a00425.html => a00431.html}              |   12 +-
 doc/html/{a00426.html => a00432.html}              |    0
 doc/html/{a00427.html => a00433.html}              |    2 +-
 doc/html/{a00436.html => a00442.html}              |    0
 doc/html/a00446.html                               |   94 --
 doc/html/a00447.html                               |  212 ---
 doc/html/{a00443.html => a00449.html}              |    0
 doc/html/{a00444.html => a00450.html}              |    0
 doc/html/a00452.html                               |   64 +-
 doc/html/a00453.html                               |  419 +++---
 doc/html/{a00451.html => a00457.html}              |   31 +-
 doc/html/a00458.html                               |   95 +-
 doc/html/a00459.html                               |  456 ++++---
 doc/html/{a00454.html => a00460.html}              | 1018 +++++++-------
 doc/html/{a00458.html => a00464.html}              |    0
 doc/html/{a00459.html => a00465.html}              |   79 +-
 doc/html/{a00466.html => a00472.html}              |    0
 doc/html/{a00474.html => a00480.html}              |    0
 doc/html/{a00476.html => a00482.html}              |    0
 doc/html/annotated.html                            |   57 +-
 doc/html/deprecated.html                           |    2 +-
 doc/html/files.html                                |  102 +-
 doc/html/functions.html                            |  197 +--
 doc/html/functions_func.html                       |  178 +--
 doc/html/functions_rela.html                       |    3 +-
 doc/html/functions_type.html                       |   18 +-
 doc/html/globals.html                              |   18 +-
 doc/html/globals_func.html                         |   18 +-
 doc/html/hierarchy.html                            |   57 +-
 doc/html/modules.html                              |   12 +-
 doc/html/namespacemembers.html                     |   14 +-
 doc/html/namespacemembers_func.html                |   14 +-
 doc/html/namespaces.html                           |    2 +-
 examples/common/copy_libraries.bat                 |    5 +-
 examples/parallel_for/polygon_overlay/polymain.cpp |   31 +-
 examples/parallel_for/polygon_overlay/polyover.cpp |  502 +++++--
 examples/parallel_for/polygon_overlay/polyover.h   |    2 +
 .../parallel_for/polygon_overlay/pover_video.cpp   |   34 +-
 examples/parallel_for/polygon_overlay/rpolygon.h   |   56 +-
 examples/pipeline/square/square.cpp                |    2 +-
 examples/task_group/sudoku/index.html              |    1 +
 examples/task_group/sudoku/msvs/sudoku.vcproj      |  712 +++++-----
 examples/task_group/sudoku/msvs/sudoku_cl.sln      |   50 +-
 examples/task_group/sudoku/sudoku.cpp              |   29 +-
 include/tbb/_concurrent_unordered_internal.h       |   54 +-
 include/tbb/aligned_space.h                        |    2 +-
 include/tbb/concurrent_hash_map.h                  |    8 +-
 include/tbb/enumerable_thread_specific.h           |  228 ++--
 include/tbb/machine/linux_ia32.h                   |    3 +-
 include/tbb/machine/linux_ia64.h                   |    4 +-
 include/tbb/machine/linux_intel64.h                |    5 +-
 include/tbb/machine/mac_ppc.h                      |   12 +-
 include/tbb/machine/sunos_sparc.h                  |    3 +-
 include/tbb/machine/windows_ia32.h                 |    2 +-
 include/tbb/machine/windows_intel64.h              |    4 +-
 include/tbb/machine/xbox360_ppc.h                  |    8 +-
 include/tbb/pipeline.h                             |   42 +-
 include/tbb/tbb_config.h                           |    6 +
 include/tbb/tbb_exception.h                        |    2 +-
 include/tbb/tbb_machine.h                          |   14 +
 include/tbb/tbb_stddef.h                           |    9 +
 src/old/test_task_v2.cpp                           |  123 --
 src/perf/time_hash_map.cpp                         |  174 +--
 src/perf/time_hash_map_fill.cpp                    |   41 +-
 src/perf/time_sandbox.h                            |   29 +-
 src/tbb/arena.h                                    |    2 +-
 src/tbb/concurrent_monitor.cpp                     |    2 +-
 src/tbb/concurrent_monitor.h                       |    6 +-
 src/tbb/custom_scheduler.h                         |   14 +-
 src/tbb/market.cpp                                 |   12 +-
 src/tbb/private_server.cpp                         |   73 +-
 src/tbb/scheduler.cpp                              |   28 +-
 src/tbb/task.cpp                                   |   48 +-
 src/tbb/task_group_context.cpp                     |   26 +-
 src/tbb/tbb_misc.cpp                               |    2 +-
 src/tbbmalloc/Customize.h                          |    8 +
 src/tbbmalloc/MemoryAllocator.cpp                  |  411 +++---
 src/tbbmalloc/tbbmalloc.cpp                        |   10 +-
 src/test/harness_m128.h                            |    4 +-
 src/test/harness_report.h                          |    4 +
 src/test/test_concurrent_hash_map.cpp              |   12 +-
 src/test/test_concurrent_unordered.cpp             |   16 +-
 src/test/test_enumerable_thread_specific.cpp       |   60 +-
 .../test/test_malloc_atexit.cpp                    |   78 +-
 src/test/test_malloc_compliance.cpp                |    4 +-
 src/test/test_malloc_init_shutdown.cpp             |  100 ++
 src/test/test_malloc_overload.cpp                  |   20 +-
 src/test/test_malloc_regression.cpp                |   11 +-
 src/test/test_malloc_whitebox.cpp                  |   35 +-
 src/test/test_parallel_for.cpp                     |   25 +-
 src/test/test_parallel_pipeline.cpp                |  191 ++-
 266 files changed, 10848 insertions(+), 14874 deletions(-)

diff --git a/CHANGES b/CHANGES
index ef101f1..807439f 100644
Binary files a/CHANGES and b/CHANGES differ
diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc
index 38ada5c..8f2d8c8 100644
--- a/build/FreeBSD.inc
+++ b/build/FreeBSD.inc
@@ -67,6 +67,7 @@ endif
 
 OBJ = o
 DLL = so
+LIBEXT=so
 
 TBB.DEF = 
 TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc
index b73d980..3598543 100644
--- a/build/Makefile.tbbmalloc
+++ b/build/Makefile.tbbmalloc
@@ -135,8 +135,12 @@ malloc_proxy_dll: $(MALLOCPROXY.DLL)
 add_debug=$(basename $(1))_debug$(suffix $(1))
 cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))
 
-MALLOC_MAIN_TESTS = test_ScalableAllocator.$(TEST_EXT) test_ScalableAllocator_STL.$(TEST_EXT) test_malloc_compliance.$(TEST_EXT) test_malloc_regression.$(TEST_EXT)
-MALLOC_OVERLOAD_TESTS =  test_malloc_overload.$(TEST_EXT) test_malloc_overload_proxy.$(TEST_EXT)
+MALLOC_MAIN_TESTS = test_ScalableAllocator.$(TEST_EXT) \
+                    test_ScalableAllocator_STL.$(TEST_EXT) \
+                    test_malloc_compliance.$(TEST_EXT) \
+                    test_malloc_regression.$(TEST_EXT) \
+                    test_malloc_init_shutdown.$(TEST_EXT)
+MALLOC_OVERLOAD_TESTS =  test_malloc_overload.$(TEST_EXT) test_malloc_overload_proxy.$(TEST_EXT) test_malloc_atexit.$(TEST_EXT)
 
 MALLOC_LIB = $(call cross_suffix,$(MALLOC.LIB))
 MALLOC_PROXY_LIB = $(call cross_suffix,$(MALLOCPROXY.LIB))
@@ -166,9 +170,17 @@ $(MALLOC_C_TESTS): %.$(TEST_EXT): %.$(OBJ) $(MALLOC_LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(LINK_FLAGS)
 endif
 
+# Rules for generating a test DLL
+%_dll.$(DLL): %_dll.$(OBJ)
+	$(LIB_LINK_CMD) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $< $(LIBS) $(DYLIB_KEY) $(LIB_LINK_FLAGS)
+
+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)
 # run_cmd is usually empty
 malloc_test: $(call cross_suffix,$(MALLOC.DLL)) $(TEST_PREREQUISITE) $(MALLOC_TESTS)
+	$(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)
@@ -177,6 +189,7 @@ malloc_test: $(call cross_suffix,$(MALLOC.DLL)) $(TEST_PREREQUISITE) $(MALLOC_TE
 	$(run_cmd) ./test_ScalableAllocator.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_ScalableAllocator_STL.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_malloc_regression.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_malloc_init_shutdown.$(TEST_EXT) $(args)
 ifeq (,$(NO_C_TESTS))
 	$(run_cmd) ./test_malloc_pure_c.$(TEST_EXT) $(args)
 endif
diff --git a/build/Makefile.test b/build/Makefile.test
index 9170272..e64e72f 100644
--- a/build/Makefile.test
+++ b/build/Makefile.test
@@ -86,8 +86,6 @@ include $(tbb_root)/build/common_rules.inc
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS)
 
 # Rules for generating a test DLL
-%_dll.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_NOSTRICT) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<
 %_dll.$(DLL): %_dll.$(OBJ) $(TBB.LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $< $(LINK_TBB.LIB) $(LIBS) $(LINK_FLAGS) $(DYLIB_KEY)
 .PRECIOUS: %_dll.$(OBJ)
@@ -254,7 +252,7 @@ test_tbb_plain: $(TEST_PREREQUISITE) $(TASK_CPP_DIRECTLY_INCLUDED) $(TEST_TBB_PL
 
 CPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)TBB_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS_NOSTRICT)) $(WARNING_SUPPRESS)
 
-TEST_TBB_OLD.OBJ = test_concurrent_vector_v2.$(OBJ) test_concurrent_queue_v2.$(OBJ) test_mutex_v2.$(OBJ) test_task_v2.$(OBJ)
+TEST_TBB_OLD.OBJ = test_concurrent_vector_v2.$(OBJ) test_concurrent_queue_v2.$(OBJ) test_mutex_v2.$(OBJ)
 
 TEST_TBB_DEPRECATED.OBJ = test_concurrent_queue_deprecated.$(OBJ) \
 	test_concurrent_vector_deprecated.$(OBJ) \
diff --git a/build/SunOS.inc b/build/SunOS.inc
index 9efb881..60cc44f 100644
--- a/build/SunOS.inc
+++ b/build/SunOS.inc
@@ -74,6 +74,7 @@ endif
 
 OBJ = o
 DLL = so
+LIBEXT=so
 
 TBB.DEF = 
 TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
diff --git a/build/common_rules.inc b/build/common_rules.inc
index db7dc31..3373c09 100644
--- a/build/common_rules.inc
+++ b/build/common_rules.inc
@@ -120,3 +120,7 @@ version_string.tmp:
 	$(MAKE_VERSIONS)
 endif
 
+
+# Rules for generating a test DLL
+%_dll.$(OBJ): %.cpp
+	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_NOSTRICT) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<
diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc
index 09862a5..e3accbb 100644
--- a/build/linux.gcc.inc
+++ b/build/linux.gcc.inc
@@ -37,6 +37,7 @@ TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor
 
 WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor
 DYLIB_KEY = -shared
+EXPORT_KEY = -Wl,--version-script,
 LIBDL = -ldl
 
 TBB_NOSTRICT = 1
diff --git a/build/linux.icc.inc b/build/linux.icc.inc
index f85e031..85fab25 100644
--- a/build/linux.icc.inc
+++ b/build/linux.icc.inc
@@ -34,6 +34,7 @@ PIC_KEY = -fPIC
 WARNING_AS_ERROR_KEY = -Werror
 WARNING_KEY = -w1
 DYLIB_KEY = -shared
+EXPORT_KEY = -Wl,--version-script,
 LIBDL = -ldl
 export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
 #TODO: autodetection of arch from COMPILER_VERSION!!
diff --git a/build/linux.inc b/build/linux.inc
index c60faee..99fbff7 100644
--- a/build/linux.inc
+++ b/build/linux.inc
@@ -38,6 +38,9 @@ ifndef arch
         ifeq ($(uname_m),sparc64)
                 export arch:=sparc
         endif
+        ifndef arch
+                export arch:=$(uname_m)
+        endif
 endif
 
 ifndef runtime
@@ -78,10 +81,21 @@ DLL = so
 LIBEXT = so
 SONAME_SUFFIX =$(shell grep TBB_COMPATIBLE_INTERFACE_VERSION $(tbb_root)/include/tbb/tbb_stddef.h | egrep -o [0-9.]+)
 
-def_prefix = $(if $(findstring 32,$(arch)),lin32,$(if $(findstring intel64,$(arch)),lin64,lin64ipf))
+ifeq ($(arch),ia64)
+        def_prefix = lin64ipf
+endif
+ifeq ($(arch),sparc)
+        def_prefix = lin64
+endif
+ifeq (,$(def_prefix))
+    ifeq (64,$(findstring 64,$(arch)))
+            def_prefix = lin64
+    else
+            def_prefix = lin32
+    endif
+endif
 TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
 
-EXPORT_KEY = -Wl,--version-script,
 TBB.DLL = $(TBB_NO_VERSION.DLL).$(SONAME_SUFFIX)
 TBB.LIB = $(TBB.DLL)
 TBB_NO_VERSION.DLL=libtbb$(DEBUG_SUFFIX).$(DLL)
diff --git a/build/macos.gcc.inc b/build/macos.gcc.inc
index 5f34f4a..4ac4731 100644
--- a/build/macos.gcc.inc
+++ b/build/macos.gcc.inc
@@ -72,7 +72,7 @@ ifeq (ppc64,$(arch))
     LIB_LINK_FLAGS += -arch ppc64
 endif
 
-ifeq (ppc,$(arch))
+ifeq (ppc32,$(arch))
     CPLUS_FLAGS += -arch ppc
     LINK_FLAGS += -arch ppc
     LIB_LINK_FLAGS += -arch ppc
diff --git a/build/windows.gcc.inc b/build/windows.gcc.inc
index ba88641..7464e48 100644
--- a/build/windows.gcc.inc
+++ b/build/windows.gcc.inc
@@ -74,8 +74,8 @@ LIBS = -lpsapi
 # Command lines
 #------------------------------------------------------------------------------
 
-LINK_FLAGS = -Wl,--enable-auto-import
-LIB_LINK_FLAGS = $(DYLIB_KEY)
+LINK_FLAGS = -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc-v2
+LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,--enable-runtime-pseudo-reloc-v2
 
 ifeq ($(cfg), release)
         CPLUS_FLAGS = -O2
diff --git a/doc/html/a00001.html b/doc/html/a00001.html
index 2d89d4d..5a85470 100644
--- a/doc/html/a00001.html
+++ b/doc/html/a00001.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00142.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()</td><td><a class="el" href="a00142.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00142.html#024be075c23c0394c9a2518d993bcd9e">end</a>()</td><td><a class="el" href="a00142.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00002.html b/doc/html/a00002.html
index 019f327..3cf66b7 100644
--- a/doc/html/a00002.html
+++ b/doc/html/a00002.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="a00143.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="a00143.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00143.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="a00143.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00143.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00003.html b/doc/html/a00003.html
index 5fc6de9..81de51f 100644
--- a/doc/html/a00003.html
+++ b/doc/html/a00003.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::atomic< void * > Member List</h1>This is the complete list of members for <a class="el" href="a00144.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="a00144.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00144.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="a00144.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00144.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::atomic< void * > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00004.html b/doc/html/a00004.html
index 24e961e..4d7e876 100644
--- a/doc/html/a00004.html
+++ b/doc/html/a00004.html
@@ -20,20 +20,20 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00148.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00148.html#18d2258400756ac1446dac7676b18df3">begin</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#94607755c5110d199202234d58d022ac">blocked_range</a>()</td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00148.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="a00148.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00148.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="a00148.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> typedef</td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>() const </td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> typedef</td><td><a class="el" href="a00148.html">tbb::blocked_range< Value ></a></td><td></td></tr>
+<h1>tbb::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00005.html b/doc/html/a00005.html
index fda8a82..445a967 100644
--- a/doc/html/a00005.html
+++ b/doc/html/a00005.html
@@ -20,16 +20,16 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00149.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="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.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="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.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="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.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="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#392a46759af2c884957115771affa7f4">cols</a>() const </td><td><a class="el" href="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#d144cb2d88cef553420311aca8667a44">empty</a>() const </td><td><a class="el" href="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>() const </td><td><a class="el" href="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a> typedef</td><td><a class="el" href="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00149.html#f496e7348a82652fba581203477cc07c">rows</a>() const </td><td><a class="el" href="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00006.html b/doc/html/a00006.html
index c414b3b..6defd30 100644
--- a/doc/html/a00006.html
+++ b/doc/html/a00006.html
@@ -20,18 +20,18 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00150.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="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00150.html">tbb::blocked_range3d [...]
-  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00150.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="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#3336ba9480fd6c43e158f9beb024c050">cols</a>() const </td><td><a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#356860e1c977d91711e8216bd55c0b25">empty</a>() const </td><td><a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>() const </td><td><a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a> typedef</td><td><a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#cf971430aa12361d3ed245344b7c6764">pages</a>() const </td><td><a class="el" href="a00150.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="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00150.html#1584623e59ff32a8aa82006827508be4">rows</a>() const </td><td><a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00007.html b/doc/html/a00007.html
index fc61e7c..e72e69e 100644
--- a/doc/html/a00007.html
+++ b/doc/html/a00007.html
@@ -20,24 +20,24 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00151.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00151.html#958ee8745c86c275bfc9533af565e017">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00151.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00151.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00151.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00151.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>(pointer p)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00151.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const </td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.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="a00151.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00151.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+<h1>tbb::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00009.html b/doc/html/a00009.html
index 66833ec..356009c 100644
--- a/doc/html/a00009.html
+++ b/doc/html/a00009.html
@@ -20,10 +20,10 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::cache_aligned_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00152.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="a00152.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00152.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="a00152.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00152.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="a00152.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00152.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
+<h1>tbb::cache_aligned_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00011.html b/doc/html/a00011.html
index 16516f6..94b29c1 100644
--- a/doc/html/a00011.html
+++ b/doc/html/a00011.html
@@ -20,17 +20,17 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::combinable< T > Member List</h1>This is the complete list of members for <a class="el" href="a00154.html">tbb::combinable< T ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.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="a00154.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00154.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00154.html#2c87e79ae98588a5780f708773388843">~combinable</a>()</td><td><a class="el" href="a00154.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::combinable< T > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00013.html b/doc/html/a00013.html
index fdac41b..5bc8391 100644
--- a/doc/html/a00013.html
+++ b/doc/html/a00013.html
@@ -20,70 +20,70 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator > 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 ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html#414d15033d36c63aa3a40666dc4d6f5e">bucket_count</a>() const </td><td><a class="el" href="a00156.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="a00156.html#a9f89be8fe28835749529d91081a2511">clear</a>()</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#d827bb5e4f61de1916ab67d51c7c6e60">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00156.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="a00156.html#a4612d5c7233712d455496641e9b31ff">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00156.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="a00156.html#df0cd14eaddb17f10929c91519e65be9">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00156.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="a00156.html#3bfe75fcb350ce39cf610c164f233edc">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#74f5ef06a06c5e619f156a1c76c04969">count</a>(const Key &key) const </td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#6cab7d029a3e73a653ef0faeac4d1586">empty</a>() const </td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html#034c3b3ee419edee78e0f2f2b1f0d7ca">erase</a>(const Key &key)</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#da7e4a50f6bb06191817425ec85fe760">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00156.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="a00156.html#0f500842d0cf791f8fa61662edb1b311">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00156.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="a00156.html#faad2108bd2be75e52293486af59f11e">exclude</a>(const_accessor &item_accessor, bool readonly)</td><td><a class="el" href="a00156.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="a00156.html#64338d7f2e35df586af4cb0145cd910f">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00156.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="a00156.html#bce7bdf46435115a95cca2aa73c5da83">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00156.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="a00156.html#199208eed6f09e200cda364f906be0fe">get_allocator</a>() const </td><td><a class="el" href="a00156.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="a00156.html#58c38b27273de6c670568633c0931854">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00156.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="a00156.html#ccfecaa3e71d92be61fb3d811dd264eb">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00156.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="a00156.html#d4a2816129e38c53128c6d0c7b6b7370">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00156.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="a00156.html#a657e61cd2b13164764ca2708875784a">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00156.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="a00156.html#52bffd1066b3d7b793945bc6fa1a71a1">insert</a>(const value_type &value)</td><td><a class="el" href="a00156.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="a00156.html#cfe172677e5987004ef4a03e22fa338a">insert</a>(I first, I last)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html#3c27779fe66b79505390d084310d997e">internal_copy</a>(const concurrent_hash_map &source)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html#976c57edfb7f22b9f91a2e11f141eb4a">internal_equal_range</a>(const Key &key, I end) const </td><td><a class="el" href="a00156.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="a00156.html#2f76ed101a0ccc8875b846c2f747897e">internal_fast_find</a>(const Key &key) const </td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#1f22480a290ddc6c145888d8f985531a">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#1e45d3cbd1e2ae06f365f1b48e0df0b5">max_size</a>() const </td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html#2c0c42a2e1b5282b6739157df9ce2304">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#13f3f2e8de7564be03882c31559493c9">rehash</a>(size_type n=0)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.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="a00156.html#17fd8c5fe8c6a86075f34aa4e8412ba3">size</a>() const </td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#eddb0d2efe0b4f25a85c059e1c3dac15">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00156.html#a1ac58997d8fbf242b266e3691573481">~concurrent_hash_map</a>()</td><td><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+<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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00015.html b/doc/html/a00015.html
index e636df4..bcd4a74 100644
--- a/doc/html/a00015.html
+++ b/doc/html/a00015.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::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="a00158.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="a00158.html#26b4fe0ca87a7ad4852cb787db880119">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00158.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="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00158.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="a00158.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</a>()</td><td><a class="el" href="a00158.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="a00158.html#57c6110bd20e95c06de5a199de988941">operator()</a>()</td><td><a class="el" href="a00158.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="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+<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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00016.html b/doc/html/a00016.html
index 7eaf1a0..c381134 100644
--- a/doc/html/a00016.html
+++ b/doc/html/a00016.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::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="a00159.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="a00159.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00159.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="a00159.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00159.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="a00159.html#a9ead65cca68d4c49c7ef64d7899a4c8">const_accessor</a>()</td><td><a class="el" href="a00159.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="a00159.html#5cce3104cb0a52e08d2131370871c614">empty</a>() const </td><td><a class="el" href="a00159.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="a00159.html#30f31106840700a4c3664b9cb1c31ca7">operator *</a>() const </td><td><a class="el" href="a00159.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="a00159.html#3d03a48ecb8cd9549bd8be64b09c9b0d">operator-></a>() const </td><td><a class="el" href="a00159.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="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</a>()</td><td><a class="el" href="a00159.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="a00159.html#48647ca0d79c1233b997f5768403c926">value_type</a> typedef</td><td><a class="el" href="a00159.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="a00159.html#752b0c1ec74b94786403a75e42917d01">~const_accessor</a>()</td><td><a class="el" href="a00159.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<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.
diff --git a/doc/html/a00017.html b/doc/html/a00017.html
index bcec9ff..025e56c 100644
--- a/doc/html/a00017.html
+++ b/doc/html/a00017.html
@@ -20,14 +20,14 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::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 >::accessor</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00159.html#a9ead65cca68d4c49c7ef64d7899a4c8">const_accessor</a>()</td><td><a class="el" href="a00159.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="a00159.html#5cce3104cb0a52e08d2131370871c614">empty</a>() const </td><td><a class="el" href="a00159.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="a00157.html#e8938f0cd1211e88a1d73527ed3636c4">operator *</a>() const </td><td><a class="el" href="a00157.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="a00157.html#fcebc32c020202cc37e60eadef157569">operator-></a>() const </td><td><a class="el" href="a00157.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="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</a>()</td><td><a class="el" href="a00159.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="a00157.html#49eec74f272bab187d176c0d9d16a7fe">value_type</a> typedef</td><td><a class="el" href="a00157.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00159.html#752b0c1ec74b94786403a75e42917d01">~const_accessor</a>()</td><td><a class="el" href="a00159.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00018.html b/doc/html/a00018.html
index 9fa9d87..65bd878 100644
--- a/doc/html/a00018.html
+++ b/doc/html/a00018.html
@@ -20,30 +20,30 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::strict_ppl::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a> typedef</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#c32e8e84c0524155133b4aae32d2a827">clear</a>()</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00160.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="a00160.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00160.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="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a> typedef</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a> typedef</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() const </td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>() const </td><td><a class="el" href="a00160.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="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>(const T &source)</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a> typedef</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> typedef</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>(T &result)</td><td><a class="el" href="a00160.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="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.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="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>() const </td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#682c3978d5cb0620000994f11c44a476">value_type</a> typedef</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00160.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>()</td><td><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+<h1>tbb::strict_ppl::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00019.html b/doc/html/a00019.html
index d53f314..a419489 100644
--- a/doc/html/a00019.html
+++ b/doc/html/a00019.html
@@ -20,34 +20,34 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::concurrent_bounded_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+<h1>tbb::concurrent_bounded_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00021.html b/doc/html/a00021.html
index 951361b..79a95ba 100644
--- a/doc/html/a00021.html
+++ b/doc/html/a00021.html
@@ -20,43 +20,43 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::deprecated::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00155.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="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &a=A())</td><td><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &src, const A &a=A())</td><td><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#9102b897776bd2d9e908e6604ff16b5f">concurrent_queue</a>(InputIterator b, InputIterator e, const A &a=A())</td><td><a class="el" href="a00161.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="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00155.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="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00155.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="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00161.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="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00161.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.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="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00155.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+<h1>tbb::deprecated::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="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.
diff --git a/doc/html/a00026.html b/doc/html/a00026.html
index d8494d8..daddd0b 100644
--- a/doc/html/a00026.html
+++ b/doc/html/a00026.html
@@ -20,77 +20,77 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#93a06b3112cb804f42f40efb5e7387b4">assign</a>(I first, I last)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#0c073ca43e787c7cbf7b0e26d2221748">at</a>(size_type index)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#23e14a38af748edff96a7adc3a0f1c58">at</a>(size_type index) const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#41ce48d6015a1a2812d41cf620ec3476">back</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#bd518e204107d07fd08d0ec5bdfd383d">back</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#730b23a251ecb6d37f692fb22f38e029">begin</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#78a06182276ff758788d4c0623ae0d71">begin</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#1693d1da41b1a8235871be9c6633be35">compact</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#fff9cece89438587997ebedf93c5e962">crend</a>() const </td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#15181759c0bfa2ddce5d10c7550e0002">front</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#502615a858eb9fa0390ee59169065e90">front</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#30484e3959892fd5392fa93c873c31f0">grow_by</a>(size_type delta)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a>(size_type delta)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#38274ab3f772ecba600c7daca7690102">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#473a59a4c9308b93411b898b3110d26c">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#691f0f3cda3e489c37a657016e375eaf">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>(size_type index)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a>(size_type index) const </td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(const_reference item) iterator push_back(const _reference item)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#3d09ccfb581b879ae64203741035e193">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#9f9c103e18d5f212703805354074ad44">rbegin</a>() const </td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a>() const </td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a>(size_type n)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a>(size_type n)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a>(size_type n, const_reference t)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() const </td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00162.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="a00162.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00162.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a>()</td><td><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="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.
diff --git a/doc/html/a00031.html b/doc/html/a00031.html
index f43057d..642e3d7 100644
--- a/doc/html/a00031.html
+++ b/doc/html/a00031.html
@@ -20,41 +20,41 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List</h1>This is the complete list of members for <a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00164.html#da7721b6c35d333ec89a37b63d0d82d3">allocator_type</a> typedef</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#efd1e3d008ec5cd69c6b10c6dcac1e2c">begin</a>()</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#5f94cdb3a743e8b57c70dcb1041cfdf9">begin</a>() const </td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#e7be0d504ba71ae6c7479eb373a361ab">clear</a>()</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#af91306d8e10e093226788a733ee59b4">empty</a>() const </td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#3156594e622924c094c45faa261dba5a">end</a>()</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#9909c01ec91ef10908c5155d6350db2d">end</a>() const </td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#ca9994099ebd88e92be061452687422e">enumerable_thread_specific</a>()</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#724ed4c846493da62b4efe032e16eb4a">enumerable_thread_specific</a>(Finit _finit)</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#105a6487c8c4113ba89891b75243780c">enumerable_thread_specific</a>(const T &_exemplar)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#8bcc55bfecc81937872b13f6db962b16">local</a>()</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#34423652c3add42563b1d5d44ca78158">local</a>(bool &exists)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#ab3f04b8d355b5d311e955d3bb63562c">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#48f5ab20db3c77faa7219deb28076e6c">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#101ecd32efae3ce1331c3d8a791c645b">size</a>() const </td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00164.html#7f6e5b3654712ea003cbb7ebaffa8dd9">~enumerable_thread_specific</a>()</td><td><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></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="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.
diff --git a/doc/html/a00042.html b/doc/html/a00042.html
index 34b0448..a8e9567 100644
--- a/doc/html/a00042.html
+++ b/doc/html/a00042.html
@@ -20,8 +20,8 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00167.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="a00167.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00167.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+<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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00046.html b/doc/html/a00046.html
index ca8a641..afda5d4 100644
--- a/doc/html/a00046.html
+++ b/doc/html/a00046.html
@@ -20,11 +20,11 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00146.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="a00146.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00146.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="a00146.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00146.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="a00146.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00146.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="a00146.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00146.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="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.
diff --git a/doc/html/a00048.html b/doc/html/a00048.html
index 7fa0f2a..4142902 100644
--- a/doc/html/a00048.html
+++ b/doc/html/a00048.html
@@ -20,13 +20,13 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00141.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="a00141.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00141.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="a00141.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00141.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+<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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00049.html b/doc/html/a00049.html
index 1467f4a..0c3e068 100644
--- a/doc/html/a00049.html
+++ b/doc/html/a00049.html
@@ -20,17 +20,17 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::filter Member List</h1>This is the complete list of members for <a class="el" href="a00165.html">tbb::filter</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00165.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00165.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="a00165.html">tbb::filter</a>)</td><td><a class="el" href="a00165.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="a00165.html">tbb::filter</a>)</td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00165.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="a00165.html">tbb::filter</a>)</td><td><a class="el" href="a00165.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="a00165.html">tbb::filter</a>)</td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+<h1>tbb::filter Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00050.html b/doc/html/a00050.html
index 5c0d41e..b509337 100644
--- a/doc/html/a00050.html
+++ b/doc/html/a00050.html
@@ -22,20 +22,20 @@
   </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="a00165.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00165.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="a00165.html">tbb::filter</a>)</td><td><a class="el" href="a00165.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="a00165.html">tbb::filter</a>)</td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00165.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [inline]</code></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="a00165.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [pure virtual]</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 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="a00165.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00165.html">tbb::filter</a></td><td><code> [virtual]</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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00002.html b/doc/html/a00052.html
similarity index 66%
copy from doc/html/a00002.html
copy to doc/html/a00052.html
index 019f327..6e872b8 100644
--- a/doc/html/a00002.html
+++ b/doc/html/a00052.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="a00143.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="a00143.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00143.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="a00143.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00143.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
+<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.
diff --git a/doc/html/a00053.html b/doc/html/a00053.html
index 174dc97..9003cd6 100644
--- a/doc/html/a00053.html
+++ b/doc/html/a00053.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::interface5::filter_t< T, U > Member List</h1>This is the complete list of members for <a class="el" href="a00166.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="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.html">tbb::interface5::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>make_filter</b> (defined in <a class="el" href="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.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="a00166.html">tbb::interface5::filter_t< T, U ></a>)</td><td><a class="el" href="a00166.html">tbb::interface5::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
+<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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00076.html b/doc/html/a00076.html
index bc06f8f..2db1358 100644
--- a/doc/html/a00076.html
+++ b/doc/html/a00076.html
@@ -20,7 +20,7 @@
     <li><a 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="a00163.html">tbb::empty_task</a>, including all inherited members.<p><table>
+<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>
diff --git a/doc/html/a00094.html b/doc/html/a00094.html
index 9467fd5..ebfe34f 100644
--- a/doc/html/a00094.html
+++ b/doc/html/a00094.html
@@ -20,9 +20,9 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00147.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="a00147.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00147.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="a00147.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00147.html">tbb::bad_last_alloc</a></td><td><code> [inline]</code></td></tr>
+<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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00099.html b/doc/html/a00099.html
index b28297d..5837e4c 100644
--- a/doc/html/a00099.html
+++ b/doc/html/a00099.html
@@ -20,19 +20,19 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00153.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="a00153.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00153.html">tbb::captured_exception</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#93d875d3555502ff6f18513525de204c">destroy</a>()</td><td><a class="el" href="a00153.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#837a50b8f6a800bda225c39d1699643f">move</a>()</td><td><a class="el" href="a00153.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const </td><td><a class="el" href="a00153.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+<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="a00153.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00153.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="a00153.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00153.html">tbb::captured_exception</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a>()</td><td><a class="el" href="a00153.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00153.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const </td><td><a class="el" href="a00153.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="a00153.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00153.html">tbb::captured_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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00102.html b/doc/html/a00102.html
index 5e570ae..160f4b4 100644
--- a/doc/html/a00102.html
+++ b/doc/html/a00102.html
@@ -20,11 +20,11 @@
     <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
-<h1>tbb::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00145.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="a00145.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00145.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="a00145.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00145.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00145.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="a00145.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00145.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="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>
 </table><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00141.html b/doc/html/a00140.html
similarity index 95%
copy from doc/html/a00141.html
copy to doc/html/a00140.html
index 169a65e..75465f4 100644
--- a/doc/html/a00141.html
+++ b/doc/html/a00140.html
@@ -21,11 +21,11 @@
     <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">affinity_partitioner</a></div>
+<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="a00404.html">partitioner.h</a>></code>
+<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>
@@ -50,7 +50,7 @@ class </td><td class="memItemRight" valign="bottom"><b>internal::affinity_p
 An affinity partitioner. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00404.html">partitioner.h</a></ul>
+<li><a class="el" href="a00409.html">partitioner.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00141.html b/doc/html/a00141.html
index 169a65e..62575be 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::affinity_partitioner Class Reference</title>
+<title>tbb::aligned_space< T, N > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,36 +21,37 @@
     <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">affinity_partitioner</a></div>
-<h1>tbb::affinity_partitioner Class Reference</h1><!-- doxytag: class="tbb::affinity_partitioner" -->An affinity partitioner.  
+<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="a00404.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00311.html">aligned_space.h</a>></code>
 <p>
-<a href="a00048.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>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 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="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>
+<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>
-An affinity partitioner. 
+<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="a00404.html">partitioner.h</a></ul>
+<li><a class="el" href="a00311.html">aligned_space.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00142.html b/doc/html/a00142.html
index b7c81a3..679900d 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::aligned_space< T, N > Class Template Reference</title>
+<title>tbb::atomic< T > Struct Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,37 +21,35 @@
     <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">aligned_space</a></div>
-<h1>tbb::aligned_space< T, N > Class Template Reference<br>
+<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="a00276.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 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="a00310.html">aligned_space.h</a>></code>
+<code>#include <<a class="el" href="a00312.html">atomic.h</a>></code>
 <p>
-<a href="a00001.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 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="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1e29e03a31436bad5eb1aa5a9d46a2da"></a><!-- doxytag: member="tbb::atomic::operator=" ref="1e29e03a31436bad5eb1aa5a9d46a2da" args="(T rhs)" -->
+T </td><td class="memItemRight" valign="bottom"><b>operator=</b> (T rhs)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">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="a00142.html#024be075c23c0394c9a2518d993bcd9e">end</a> ()</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>
 
-<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>
+<h3>template<typename T><br>
+ struct tbb::atomic< T ></h3>
 
-Block of space aligned sufficiently to construct an array T with N elements. 
+Primary template for atomic. 
 <p>
-The elements are not constructed or destroyed by this class. 
+See the Reference for details. 
 <p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00310.html">aligned_space.h</a></ul>
+<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>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00143.html b/doc/html/a00143.html
index b40de9e..fddbba3 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< T > Struct Template Reference</title>
+<title>tbb::atomic< void * > Struct Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,35 +21,30 @@
     <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</a></div>
-<h1>tbb::atomic< T > Struct Template Reference<br>
-<small>
-[<a class="el" href="a00277.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::atomic" -->Primary template for atomic.  
+<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="a00311.html">atomic.h</a>></code>
+<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">
+<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="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="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="90791297d59b1659cfaf0d93c7cc59ae"></a><!-- doxytag: member="tbb::atomic::operator=" ref="90791297d59b1659cfaf0d93c7cc59ae" args="(const atomic< T > &rhs)" -->
-<a class="el" href="a00143.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00143.html">atomic</a>< T > &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<typename T><br>
- struct tbb::atomic< T ></h3>
+<h3>template<><br>
+ struct tbb::atomic< void * ></h3>
 
-Primary template for atomic. 
-<p>
-See the Reference for details. 
+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="a00311.html">atomic.h</a></ul>
+<li><a class="el" href="a00312.html">atomic.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00144.html b/doc/html/a00144.html
index de22ed9..a238209 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::atomic< void * > Struct Template Reference</title>
+<title>tbb::internal::atomic_backoff Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,30 +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="a00144.html">atomic< void * ></a></div>
-<h1>tbb::atomic< void * > Struct Template Reference</h1><!-- doxytag: class="tbb::atomic< void * >" -->Specialization for <a class="el" href="a00144.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
+<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="a00311.html">atomic.h</a>></code>
+<code>#include <<a class="el" href="a00460.html">tbb_machine.h</a>></code>
 <p>
-<a href="a00003.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00102.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="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="a00143.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00143.html">atomic</a>< void * > &rhs)</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>
-<h3>template<><br>
- struct tbb::atomic< void * ></h3>
-
-Specialization for <a class="el" href="a00144.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->. 
+Class that implements exponential backoff. 
+<p>
+See implementation of spin_wait_while_eq for an example. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00311.html">atomic.h</a></ul>
+<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>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00145.html b/doc/html/a00145.html
index a20082b..c6a13b3 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::internal::atomic_backoff Class Reference</title>
+<title>tbb::auto_partitioner Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,33 +21,38 @@
     <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="a00145.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 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="a00454.html">tbb_machine.h</a>></code>
+<code>#include <<a class="el" href="a00409.html">partitioner.h</a>></code>
 <p>
-<a href="a00102.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00046.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47f7e0208a2bf68f35b51b27d2ddf2a"></a><!-- doxytag: member="tbb::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="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="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="45edb535489eb0e76ecc59a19fd952de"></a><!-- doxytag: member="tbb::internal::atomic_backoff::reset" ref="45edb535489eb0e76ecc59a19fd952de" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><b>reset</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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>
-Class that implements exponential backoff. 
+An auto partitioner. 
 <p>
-See implementation of spin_wait_while_eq for an example. 
+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="a00454.html">tbb_machine.h</a></ul>
+<li><a class="el" href="a00409.html">partitioner.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00146.html b/doc/html/a00146.html
index 0904347..7eabe80 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::auto_partitioner Class Reference</title>
+<title>tbb::bad_last_alloc Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,38 +21,24 @@
     <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">auto_partitioner</a></div>
-<h1>tbb::auto_partitioner Class Reference<br>
-<small>
-[<a class="el" href="a00274.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::auto_partitioner" -->An auto partitioner.  
+<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="a00404.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00459.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00046.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00094.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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>
+<tr><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>
-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. 
+Exception for concurrent containers. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00404.html">partitioner.h</a></ul>
+<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00147.html b/doc/html/a00147.html
index 82143f1..ae2a156 100644
--- a/doc/html/a00147.html
+++ b/doc/html/a00147.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::bad_last_alloc Class Reference</title>
+<title>tbb::blocked_range< Value > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,24 +21,198 @@
     <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">bad_last_alloc</a></div>
-<h1>tbb::bad_last_alloc Class Reference</h1><!-- doxytag: class="tbb::bad_last_alloc" -->Exception for concurrent containers.  
+<a class="el" href="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="a00453.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00320.html">blocked_range.h</a>></code>
 <p>
-<a href="a00094.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="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"><a class="anchor" name="ec7a57742ff4dc214266179d88984015"></a><!-- doxytag: member="tbb::bad_last_alloc::what" ref="ec7a57742ff4dc214266179d88984015" args="() const " -->
-const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const   throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </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>
-Exception for concurrent containers. 
+<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="a00453.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00320.html">blocked_range.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00148.html b/doc/html/a00148.html
index c2baa07..2baf543 100644
--- a/doc/html/a00148.html
+++ b/doc/html/a00148.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::blocked_range< Value > Class Template Reference</title>
+<title>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,198 +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="a00148.html">blocked_range</a></div>
-<h1>tbb::blocked_range< Value > Class Template Reference<br>
+<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="a00274.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::blocked_range" -->A range over which to iterate.  
+[<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="a00319.html">blocked_range.h</a>></code>
+<code>#include <<a class="el" href="a00321.html">blocked_range2d.h</a>></code>
 <p>
-<a href="a00004.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00005.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef Value </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a></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 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="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_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 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="a00148.html#94607755c5110d199202234d58d022ac">blocked_range</a> ()</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="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="a00148.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> grainsize_=1)</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="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="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.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="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.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="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.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="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.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="a00148.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a> () const </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">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a> () const </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.  <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="a00148.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a> (<a class="el" href="a00148.html">blocked_range</a> &r, <a class="el" href="a00198.html">split</a>)</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="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="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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="13d172a4da9be197033e64516fff1f4b"></a><!-- doxytag: member="tbb::blocked_range::blocked_range3d" ref="13d172a4da9be197033e64516fff1f4b" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b></td></tr>
+<tr><td class="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 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="a00148.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<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>
-Type of a value. 
-<p>
-Called a const_iterator for sake of algorithms that need to treat a <a class="el" href="a00148.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="a00148.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00148.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="a00148.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00148.html">blocked_range</a>           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00148.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="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00148.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="a00148.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="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00148.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="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="el" href="a00148.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="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00148.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="a00319.html">blocked_range.h</a></ul>
+<li><a class="el" href="a00321.html">blocked_range2d.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00149.html b/doc/html/a00149.html
index e1bfa81..e0cdf24 100644
--- a/doc/html/a00149.html
+++ b/doc/html/a00149.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference</title>
+<title>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,60 +21,67 @@
     <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_range2d</a></div>
-<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
+<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="a00274.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::blocked_range2d" -->A 2-dimensional range that models the Range concept.  
+[<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="a00320.html">blocked_range2d.h</a>></code>
+<code>#include <<a class="el" href="a00322.html">blocked_range3d.h</a>></code>
 <p>
-<a href="a00005.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00006.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a807a22fe658ec38b8edfd69521d0383"></a><!-- doxytag: member="tbb::blocked_range2d::row_range_type" ref="a807a22fe658ec38b8edfd69521d0383" args="" -->
-typedef <a class="el" href="a00148.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8ebf17a552ba47825e9b3887855b719"></a><!-- doxytag: member="tbb::blocked_range3d::page_range_type" ref="b8ebf17a552ba47825e9b3887855b719" args="" -->
+typedef <a class="el" href="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="750d5c6ac9915443df477a30031c07fd"></a><!-- doxytag: member="tbb::blocked_range2d::col_range_type" ref="750d5c6ac9915443df477a30031c07fd" args="" -->
-typedef <a class="el" href="a00148.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="a00148.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00148.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="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="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="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="d144cb2d88cef553420311aca8667a44"></a><!-- doxytag: member="tbb::blocked_range2d::empty" ref="d144cb2d88cef553420311aca8667a44" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#d144cb2d88cef553420311aca8667a44">empty</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="356860e1c977d91711e8216bd55c0b25"></a><!-- doxytag: member="tbb::blocked_range3d::empty" ref="356860e1c977d91711e8216bd55c0b25" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="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="ad36a9b38e4fef26d376f99552ce2d92"></a><!-- doxytag: member="tbb::blocked_range2d::is_divisible" ref="ad36a9b38e4fef26d376f99552ce2d92" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a> () const </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="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="a00149.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="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="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="a00148.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#f496e7348a82652fba581203477cc07c">rows</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="392a46759af2c884957115771affa7f4"></a><!-- doxytag: member="tbb::blocked_range2d::cols" ref="392a46759af2c884957115771affa7f4" args="() const " -->
-const <a class="el" href="a00148.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html#392a46759af2c884957115771affa7f4">cols</a> () const </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 RowValue, typename ColValue = RowValue><br>
- class tbb::blocked_range2d< RowValue, ColValue ></h3>
+<h3>template<typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue><br>
+ class tbb::blocked_range3d< PageValue, RowValue, ColValue ></h3>
 
-A 2-dimensional range that models the Range concept. 
+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="a00320.html">blocked_range2d.h</a></ul>
+<li><a class="el" href="a00322.html">blocked_range3d.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00150.html b/doc/html/a00150.html
index e2f0df2..15f547d 100644
--- a/doc/html/a00150.html
+++ b/doc/html/a00150.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference</title>
+<title>tbb::cache_aligned_allocator< T > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,67 +21,88 @@
     <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">blocked_range3d</a></div>
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
+<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="a00274.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::blocked_range3d" -->A 3-dimensional range that models the Range concept.  
+[<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="a00321.html">blocked_range3d.h</a>></code>
+<code>#include <<a class="el" href="a00323.html">cache_aligned_allocator.h</a>></code>
 <p>
-<a href="a00006.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00007.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8ebf17a552ba47825e9b3887855b719"></a><!-- doxytag: member="tbb::blocked_range3d::page_range_type" ref="b8ebf17a552ba47825e9b3887855b719" args="" -->
-typedef <a class="el" href="a00148.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a></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="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="a00148.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="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="02229b59d4dc5437bf5fbe72acca7f66"></a><!-- doxytag: member="tbb::blocked_range3d::col_range_type" ref="02229b59d4dc5437bf5fbe72acca7f66" args="" -->
-typedef <a class="el" href="a00148.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="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="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="a00148.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00148.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00148.html#f5707bffea38eee [...]
+<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="356860e1c977d91711e8216bd55c0b25"></a><!-- doxytag: member="tbb::blocked_range3d::empty" ref="356860e1c977d91711e8216bd55c0b25" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#356860e1c977d91711e8216bd55c0b25">empty</a> () const </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="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="a00150.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a> () 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="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="a00150.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="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="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="a00148.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#cf971430aa12361d3ed245344b7c6764">pages</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects, starting on a cache/sector line. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d4eadf188f7d85d3805ae534e0b8e1c"></a><!-- doxytag: member="tbb::cache_aligned_allocator::deallocate" ref="3d4eadf188f7d85d3805ae534e0b8e1c" args="(pointer p, size_type)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a> (pointer p, size_type)</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="a00148.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#1584623e59ff32a8aa82006827508be4">rows</a> () const </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">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="a00148.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html#3336ba9480fd6c43e158f9beb024c050">cols</a> () const </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>
 
-<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>
+<h3>template<typename T><br>
+ class tbb::cache_aligned_allocator< T ></h3>
 
-A 3-dimensional range that models the Range concept. 
+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="a00321.html">blocked_range3d.h</a></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.
diff --git a/doc/html/a00151.html b/doc/html/a00151.html
index f72039d..c670332 100644
--- a/doc/html/a00151.html
+++ b/doc/html/a00151.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::cache_aligned_allocator< T > Class Template Reference</title>
+<title>tbb::cache_aligned_allocator< void > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,88 +21,39 @@
     <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</a></div>
-<h1>tbb::cache_aligned_allocator< T > Class Template Reference<br>
+<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="a00276.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::cache_aligned_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+[<a class="el" href="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="a00322.html">cache_aligned_allocator.h</a>></code>
+<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">
+<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="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="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="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="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="2ab296f4ecdd75f8e193ff92004a697d"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::value_type" ref="2ab296f4ecdd75f8e193ff92004a697d" args="" -->
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
 
-<tr><td class="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="a00151.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="a00151.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="a00151.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="a00151.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="a00151.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="a00151.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="a00151.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>
+<h3>template<><br>
+ class tbb::cache_aligned_allocator< void ></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. 
+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="a00322.html">cache_aligned_allocator.h</a></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.
diff --git a/doc/html/a00152.html b/doc/html/a00152.html
index 366b8f3..b8bdd7d 100644
--- a/doc/html/a00152.html
+++ b/doc/html/a00152.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::cache_aligned_allocator< void > Class Template Reference</title>
+<title>tbb::captured_exception Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,39 +21,131 @@
     <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">cache_aligned_allocator< void ></a></div>
-<h1>tbb::cache_aligned_allocator< void > Class Template Reference<br>
-<small>
-[<a class="el" href="a00276.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::cache_aligned_allocator< void >" -->Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+<a class="el" href="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="a00322.html">cache_aligned_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00459.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00009.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce89776145998f0685a767b4f195272d"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::pointer" ref="ce89776145998f0685a767b4f195272d" args="" -->
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="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="2ab296f4ecdd75f8e193ff92004a697d"></a><!-- doxytag: member="tbb::cache_aligned_allocator< void >::value_type" ref="2ab296f4ecdd75f8e193ff92004a697d" args="" -->
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr><td class="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 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="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>
-<h3>template<><br>
- class tbb::cache_aligned_allocator< void ></h3>
+This class is used by TBB to propagate information about unhandled exceptions into the root thread. 
+<p>
+Exception of this type is thrown by TBB in the root thread (thread that started a parallel algorithm ) if an unhandled exception was intercepted during the algorithm execution in one of the workers. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00206.html">tbb::tbb_exception</a> </dd></dl>
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <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="a00322.html">cache_aligned_allocator.h</a></ul>
+<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00153.png b/doc/html/a00152.png
similarity index 100%
rename from doc/html/a00153.png
rename to doc/html/a00152.png
diff --git a/doc/html/a00153.html b/doc/html/a00153.html
index eecc2d0..bae449c 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::captured_exception Class Reference</title>
+<title>tbb::combinable< T > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,131 +21,58 @@
     <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">captured_exception</a></div>
-<h1>tbb::captured_exception Class Reference</h1><!-- doxytag: class="tbb::captured_exception" --><!-- doxytag: inherits="tbb::tbb_exception" -->This class is used by TBB to propagate information about unhandled exceptions into the root thread.  
+<a class="el" href="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="a00453.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00325.html">combinable.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::captured_exception:
-<p><center><img src="a00153.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">
+<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="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="a00153.html">captured_exception</a> &src)</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="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="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="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="a00153.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00153.html">captured_exception</a> &src)</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="el" href="a00153.html">captured_exception</a> *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html#837a50b8f6a800bda225c39d1699643f">move</a> ()  throw ()</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="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="a00153.html#93d875d3555502ff6f18513525de204c">destroy</a> ()  throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f09233cccb9b5e8a58874e43a703cac2"></a><!-- doxytag: member="tbb::combinable::clear" ref="f09233cccb9b5e8a58874e43a703cac2" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00153.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="a00153.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2d7550204bcb88fa8810b5a39e9cad24"></a><!-- doxytag: member="tbb::combinable::local" ref="2d7550204bcb88fa8810b5a39e9cad24" args="()" -->
+T & </td><td class="memItemRight" valign="bottom"><b>local</b> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">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="a00153.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a> () const   throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93a42052881ecccdd8ddff16a1b1cca1"></a><!-- doxytag: member="tbb::combinable::local" ref="93a42052881ecccdd8ddff16a1b1cca1" args="(bool &exists)" -->
+T & </td><td class="memItemRight" valign="bottom"><b>local</b> (bool &exists)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">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="a00153.html#6b5988ef74a1fe2a58998d110b3633e0">what</a> () const   throw ()</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="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00153.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>
+<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>
-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="a00153.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="a00153.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">
+<h3>template<typename T><br>
+ class tbb::combinable< T ></h3>
 
+Thread-local storage with optional reduction. 
 <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="a00453.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00325.html">combinable.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00154.html b/doc/html/a00154.html
index 40015d5..861ec22 100644
--- a/doc/html/a00154.html
+++ b/doc/html/a00154.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::combinable< T > Class Template Reference</title>
+<title>tbb::concurrent_bounded_queue< T, A > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,58 +21,280 @@
     <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">combinable</a></div>
-<h1>tbb::combinable< T > Class Template Reference<br>
+<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="a00275.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::combinable" -->Thread-local storage with optional reduction.  
+[<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="a00324.html">combinable.h</a>></code>
+<code>#include <<a class="el" href="a00336.html">concurrent_queue.h</a>></code>
 <p>
-<a href="a00011.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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="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="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="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="a00154.html#2c87e79ae98588a5780f708773388843">~combinable</a> ()</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">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="a00154.html">combinable</a> &other)</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="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="a00154.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00154.html">combinable</a> &other)</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="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="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="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="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="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="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 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 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 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>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>destroyer</b></td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class used to ensure exception-safety of method "pop". <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::combinable< T ></h3>
+<h3>template<typename T, class A = cache_aligned_allocator<T>><br>
+ class tbb::concurrent_bounded_queue< T, A ></h3>
 
-Thread-local storage with optional reduction. 
+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="a00324.html">combinable.h</a></ul>
+<li><a class="el" href="a00336.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00155.png b/doc/html/a00154.png
similarity index 100%
rename from doc/html/a00155.png
rename to doc/html/a00154.png
diff --git a/doc/html/a00155.html b/doc/html/a00155.html
index d3eae09..e4f5e66 100644
--- a/doc/html/a00155.html
+++ b/doc/html/a00155.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_bounded_queue< T, A > Class Template Reference</title>
+<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>
@@ -21,170 +21,311 @@
     <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="a00155.html">concurrent_bounded_queue</a></div>
-<h1>tbb::concurrent_bounded_queue< T, A > Class Template Reference<br>
+<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="a00275.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::concurrent_bounded_queue" -->A high-performance thread-safe blocking concurrent bounded queue.  
+[<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="a00335.html">concurrent_queue.h</a>></code>
+<code>#include <<a class="el" href="a00326.html">concurrent_hash_map.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:
-<p><center><img src="a00155.png" usemap="#tbb::concurrent_bounded_queue< T, A >_map" border="0" alt=""></center>
-<map name="tbb::concurrent_bounded_queue< T, A >_map">
-<area href="a00161.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">
+<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="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="a00155.html#98245517a931e5893f6601e66c51fc75">value_type</a></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="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="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a></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="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="a00155.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a></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="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="a00155.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a></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="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="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a></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="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="a00155.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a></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="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="a00155.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="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="0edd1a90e6ffa503bac1c4027116dbff"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::const_iterator" ref="0edd1a90e6ffa503bac1c4027116dbff" args="" -->
-typedef internal::concurrent_queue_iterator<<br>
- <a class="el" href="a00155.html">concurrent_bounded_queue</a>,<br>
- const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="a00155.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a> (const <a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</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 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="a00155.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a> (const <a class="el" href="a00155.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</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="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="a00155.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>())</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">[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="a00155.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</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="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="a00155.html#ceb08c743b11ba88c878e73fff8af20b">push</a> (const T &source)</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="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="a00155.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a> (T &destination)</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="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="a00155.html#2bd6232531279fb3ccbd296bea23066b">try_push</a> (const T &source)</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="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="a00155.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a> (T &destination)</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="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="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#7dc14d1a579a4cccda9f857585e1768d">size</a> () 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="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="a00155.html#f64924f2ee9225c368a270fc3c394db9">empty</a> () 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="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00155.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="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a> () const </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="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="a00155.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a> (<a class="el" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> new_capacity)</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">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="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</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="90b31e2954c6e4596c7900435a5f4bc1"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::clear" ref="90b31e2954c6e4596c7900435a5f4bc1" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00155.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a> ()</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">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="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="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="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="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="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="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 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="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 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"><b>destroyer</b></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>
 
-<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>
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></h3>
 
-A high-performance thread-safe blocking concurrent bounded queue. 
+Unordered map from Key to T. 
 <p>
-This is the pre-PPL TBB concurrent queue which 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. 
+<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 Typedef Documentation</h2>
-<a class="anchor" name="a80e4c11dbb324e4b92a24a77bbcde68"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::size_type" ref="a80e4c11dbb324e4b92a24a77bbcde68" args="" -->
+<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 T, class A = cache_aligned_allocator<T>> </div>
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
       <table class="memname">
         <tr>
-          <td class="memname">typedef std::ptrdiff_t <a class="el" href="a00155.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>          </td>
+          <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>
-Integral type for representing size of the queue. 
+Erase item by accessor. 
 <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. 
+Return true if item was erased by particularly this call. 
 </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)" -->
+<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 T, class A = cache_aligned_allocator<T>> </div>
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00155.html">tbb::concurrent_bounded_queue</a>< T, A >::pop           </td>
+          <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">T & </td>
-          <td class="paramname"> <em>destination</em>          </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>
@@ -193,69 +334,112 @@ template<typename T, class A = cache_aligned_allocator<T>> </div>
 <div class="memdoc">
 
 <p>
-Dequeue item from head of queue. 
+Erase item by <a class="el" href="a00158.html">const_accessor</a>. 
 <p>
-Block until an item becomes available, and then dequeue it. 
+Return true if item was erased by particularly this call. 
 </div>
 </div><p>
-<a class="anchor" name="f3c6c934f85fd02aedbc83a16943193b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::set_capacity" ref="f3c6c934f85fd02aedbc83a16943193b" args="(size_type new_capacity)" -->
+<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 T, class A = cache_aligned_allocator<T>> </div>
+template<typename Key, typename T, typename HashCompare, typename A> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00155.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity           </td>
+          <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"><a class="el" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td>
-          <td class="paramname"> <em>new_capacity</em>          </td>
+          <td class="paramtype">const Key & </td>
+          <td class="paramname"> <em>key</em>          </td>
           <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
+          <td width="100%"></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Set the capacity. 
+Erase item. 
 <p>
-Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever. 
+Return true if item was erased by particularly this call. 
 </div>
 </div><p>
-<a class="anchor" name="7dc14d1a579a4cccda9f857585e1768d"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::size" ref="7dc14d1a579a4cccda9f857585e1768d" args="() const " -->
+<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 T, class A = cache_aligned_allocator<T>> </div>
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="el" href="a00155.html">tbb::concurrent_bounded_queue</a>< T, A >::size           </td>
+          <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="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"> const<code> [inline]</code></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>
-Return number of pushes minus number of pops. 
+Find item and acquire a write lock on the item. 
 <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="a00155.html#b2888b3e4e837d7e03f2c731963a402b">capacity()</a> if there are push operations in flight. 
+Return true if item is found, false otherwise. 
 </div>
 </div><p>
-<a class="anchor" name="0ca487019bbb00a196442aff78a1e4f7"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::try_pop" ref="0ca487019bbb00a196442aff78a1e4f7" args="(T &destination)" -->
+<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 T, class A = cache_aligned_allocator<T>> </div>
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00155.html">tbb::concurrent_bounded_queue</a>< T, A >::try_pop           </td>
+          <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">T & </td>
-          <td class="paramname"> <em>destination</em>          </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>
@@ -264,37 +448,193 @@ template<typename T, class A = cache_aligned_allocator<T>> </div>
 <div class="memdoc">
 
 <p>
-Attempt to dequeue an item from head of queue. 
+Insert item by copying if there is no such key present already. 
 <p>
-Does not wait for item to become available. Returns true if successful; false otherwise. 
+Returns true if item is inserted. 
 </div>
 </div><p>
-<a class="anchor" name="2bd6232531279fb3ccbd296bea23066b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::try_push" ref="2bd6232531279fb3ccbd296bea23066b" args="(const T &source)" -->
+<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 T, class A = cache_aligned_allocator<T>> </div>
+template<typename Key, typename T, typename HashCompare, typename Allocator> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00155.html">tbb::concurrent_bounded_queue</a>< T, A >::try_push           </td>
+          <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 T & </td>
-          <td class="paramname"> <em>source</em>          </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%"><code> [inline]</code></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>
-Enqueue an item at tail of queue if queue is not already full. 
+Rehashes and optionally resizes the whole table. 
 <p>
-Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. 
+Useful to optimize performance before or after concurrent operations. Also enables using of <a class="el" href="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="a00335.html">concurrent_queue.h</a></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.
diff --git a/doc/html/a00156.html b/doc/html/a00156.html
index 93a71f2..564906d 100644
--- a/doc/html/a00156.html
+++ b/doc/html/a00156.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator > Class Template Reference</title>
+<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>
@@ -21,620 +21,42 @@
     <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="a00156.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="a00275.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::interface4::concurrent_hash_map" -->Unordered map from Key to T.  
+<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="a00325.html">concurrent_hash_map.h</a>></code>
+<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">
+<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="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="a00156.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="a00156.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 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="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="a00156.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="a00156.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="a00156.html#df0cd14eaddb17f10929c91519e65be9">concurrent_hash_map</a> (const <a class="el" href="a00156.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="a00156.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="a00156.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html#2c0c42a2e1b5282b6739157df9ce2304">operator=</a> (const <a class="el" href="a00156.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="a00156.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="a00156.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="a00156.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="a00156.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="a00156.html#6cab7d029a3e73a653ef0faeac4d1586">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00156.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="a00156.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="a00156.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="a00156.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="a00156.html#eddb0d2efe0b4f25a85c059e1c3dac15">swap</a> (<a class="el" href="a00156.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="a00156.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="a00156.html#64338d7f2e35df586af4cb0145cd910f">find</a> (<a class="el" href="a00159.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="a00156.html#bce7bdf46435115a95cca2aa73c5da83">find</a> (<a class="el" href="a00157.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="a00156.html#58c38b27273de6c670568633c0931854">insert</a> (<a class="el" href="a00159.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="a00156.html#ccfecaa3e71d92be61fb3d811dd264eb">insert</a> (<a class="el" href="a00157.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="a00156.html#d4a2816129e38c53128c6d0c7b6b7370">insert</a> (<a class="el" href="a00159.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="a00156.html#a657e61cd2b13164764ca2708875784a">insert</a> (<a class="el" href="a00157.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="a00156.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="a00156.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="a00156.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="a00156.html#da7e4a50f6bb06191817425ec85fe760">erase</a> (<a class="el" href="a00159.html">const_accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00159.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="a00156.html#0f500842d0cf791f8fa61662edb1b311">erase</a> (<a class="el" href="a00157.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="a00156.html#1f22480a290ddc6c145888d8f985531a">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00159.html">const_accessor</a> *result, bool write)</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">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="a00156.html#faad2108bd2be75e52293486af59f11e">exclude</a> (<a class="el" href="a00159.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="a00156.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="a00156.html#3c27779fe66b79505390d084310d997e">internal_copy</a> (const <a class="el" href="a00156.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="a00156.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="a00157.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="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">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="a00158.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">const_accessor</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00159.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>node</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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 ></h3>
-
-Unordered map from Key to T. 
-<p>
-<a class="el" href="a00156.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="a00156.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="a00156.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="a00156.html#58c38b27273de6c670568633c0931854">insert()</a> methods</li><li>Added <a class="el" href="a00156.html#199208eed6f09e200cda364f906be0fe">get_allocator()</a></li><li>Added <a class="el" href="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00157.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="a00156.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00159.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="a00159.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="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00157.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">
+ 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>
-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="a00156.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00159.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="a00156.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="a00156.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00157.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="a00156.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00159.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="a00156.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00157.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="a00156.html">tbb::interface4::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00159.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="a00156.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="a00156.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="a00156.html#64338d7f2e35df586af4cb0145cd910f">find()</a> and <a class="el" href="a00156.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="a00325.html">concurrent_hash_map.h</a></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.
diff --git a/doc/html/a00157.png b/doc/html/a00156.png
similarity index 100%
rename from doc/html/a00157.png
rename to doc/html/a00156.png
diff --git a/doc/html/a00157.html b/doc/html/a00157.html
index ca7109f..c4054ce 100644
--- a/doc/html/a00157.html
+++ b/doc/html/a00157.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Class Reference</title>
+<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>
@@ -21,42 +21,42 @@
     <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="a00156.html">concurrent_hash_map</a>::<a class="el" href="a00157.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 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="a00325.html">concurrent_hash_map.h</a>></code>
+<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="a00157.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="a00159.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">
+<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="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="a00157.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="a00157.html#e8938f0cd1211e88a1d73527ed3636c4">operator *</a> () const </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">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="a00157.html#fcebc32c020202cc37e60eadef157569">operator-></a> () const </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>
 
-<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>
+ class tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</h3>
 
-Allows write access to elements and combines data access, locking, and garbage collection. 
+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="a00325.html">concurrent_hash_map.h</a></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.
diff --git a/doc/html/a00158.html b/doc/html/a00158.html
index 30be5c2..1cd874b 100644
--- a/doc/html/a00158.html
+++ b/doc/html/a00158.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Class Reference</title>
+<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>
@@ -21,42 +21,65 @@
     <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="a00156.html">concurrent_hash_map</a>::<a class="el" href="a00158.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 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="a00325.html">concurrent_hash_map.h</a>></code>
+<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">
+<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="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="a00156.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="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="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="a00158.html#26b4fe0ca87a7ad4852cb787db880119">acquire</a> (<a class="el" href="a00156.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</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">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="a00158.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</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">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="a00158.html#57c6110bd20e95c06de5a199de988941">operator()</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="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>
+<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 >::bucket_accessor</h3>
+ class tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</h3>
 
-bucket accessor is to find, rehash, acquire a lock, and access a bucket 
+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="a00325.html">concurrent_hash_map.h</a></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.
diff --git a/doc/html/a00159.png b/doc/html/a00158.png
similarity index 100%
rename from doc/html/a00159.png
rename to doc/html/a00158.png
diff --git a/doc/html/a00159.html b/doc/html/a00159.html
index 1a98f62..ba24fd5 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::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Class Reference</title>
+<title>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,65 +21,143 @@
     <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="a00156.html">concurrent_hash_map</a>::<a class="el" href="a00159.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 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="a00325.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00336.html">concurrent_queue.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor:
-<p><center><img src="a00159.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="a00157.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">
+<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="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="a00159.html#48647ca0d79c1233b997f5768403c926">value_type</a></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 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="a00159.html#5cce3104cb0a52e08d2131370871c614">empty</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7c48a05a94a1f4f98fdfadfbef98ecf6"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="7c48a05a94a1f4f98fdfadfbef98ecf6" args="(const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="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">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="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</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">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="a00159.html#30f31106840700a4c3664b9cb1c31ca7">operator *</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a6b98ea11a867db8ac868f0113ca429"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::concurrent_queue" ref="8a6b98ea11a867db8ac868f0113ca429" args="(const concurrent_queue &src, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="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">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="a00159.html#3d03a48ecb8cd9549bd8be64b09c9b0d">operator-></a> () const </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">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="a00159.html#a9ead65cca68d4c49c7ef64d7899a4c8">const_accessor</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">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="a00159.html#752b0c1ec74b94786403a75e42917d01">~const_accessor</a> ()</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">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="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="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>
+<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 Key, typename T, typename HashCompare, typename Allocator><br>
- class tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</h3>
+<h3>template<typename T, typename A = cache_aligned_allocator<T>><br>
+ class tbb::strict_ppl::concurrent_queue< T, A ></h3>
 
-Combines data access, locking, and garbage collection. 
+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="a00325.html">concurrent_hash_map.h</a></ul>
+<li><a class="el" href="a00336.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00160.html b/doc/html/a00160.html
index 52f1f8a..e61f478 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::strict_ppl::concurrent_queue< T, A > Class Template Reference</title>
+<title>tbb::deprecated::concurrent_queue< T, A > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,128 +21,88 @@
     <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="a00273.html">strict_ppl</a>::<a class="el" href="a00160.html">concurrent_queue</a></div>
-<h1>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<br>
+<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="a00275.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::strict_ppl::concurrent_queue" -->A high-performance thread-safe non-blocking concurrent queue.  
+[<a class="el" href="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="a00335.html">concurrent_queue.h</a>></code>
+<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">
+<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="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="a00160.html#682c3978d5cb0620000994f11c44a476">value_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8861a9cdf232a20b5f2569754a281871"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::iterator" ref="8861a9cdf232a20b5f2569754a281871" args="" -->
+typedef <a class="el" href="a00154.html">concurrent_bounded_queue</a><<br>
+ T, A >::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">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="a00160.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="a00160.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="a00160.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="a00160.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="a00160.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="a00160.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="a00160.html">concurrent_queue</a>, const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="a00160.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a> (const <a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aaf19bd7337b72f3131ece60f7315ef7"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="aaf19bd7337b72f3131ece60f7315ef7" args="(const A &a=A())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="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="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="a00160.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00160.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="a00160.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a> (const <a class="el" href="a00160.html">concurrent_queue</a> &src, const <a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a>())</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="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="a00160.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="a00160.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="a00160.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="a00160.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.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="a00160.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a> () const </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">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="a00160.html#c32e8e84c0524155133b4aae32d2a827">clear</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">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="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue if queue is not already full.  <a href="#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">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="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="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="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="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="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="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 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::strict_ppl::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::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, typename A = cache_aligned_allocator<T>><br>
- class tbb::strict_ppl::concurrent_queue< T, A ></h3>
+<h3>template<typename T, class A = cache_aligned_allocator<T>><br>
+ class tbb::deprecated::concurrent_queue< T, A ></h3>
 
-A high-performance thread-safe non-blocking concurrent queue. 
+A high-performance thread-safe blocking concurrent bounded queue. 
 <p>
-Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+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="ae31ca0db34ef96ef1e74aa0d28c95f8"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::try_pop" ref="ae31ca0db34ef96ef1e74aa0d28c95f8" args="(T &result)" -->
+<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, typename A = cache_aligned_allocator<T>> </div>
+template<typename T, class A = cache_aligned_allocator<T>> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue</a>< T, A >::try_pop           </td>
+          <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>result</em>          </td>
+          <td class="paramname"> <em>destination</em>          </td>
           <td> ) </td>
           <td width="100%"><code> [inline]</code></td>
         </tr>
@@ -153,11 +113,36 @@ template<typename T, typename A = cache_aligned_allocator<T>> </div>
 <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. 
+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="a00335.html">concurrent_queue.h</a></ul>
+<li><a class="el" href="a00336.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00161.png b/doc/html/a00160.png
similarity index 100%
rename from doc/html/a00161.png
rename to doc/html/a00160.png
diff --git a/doc/html/a00161.html b/doc/html/a00161.html
index 1d9434f..07b22f5 100644
--- a/doc/html/a00161.html
+++ b/doc/html/a00161.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::deprecated::concurrent_queue< T, A > Class Template Reference</title>
+<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,88 +21,327 @@
     <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="a00161.html">concurrent_queue</a></div>
-<h1>tbb::deprecated::concurrent_queue< T, A > Class Template Reference<br>
+<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="a00275.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::deprecated::concurrent_queue" --><!-- doxytag: inherits="tbb::concurrent_bounded_queue" -->A high-performance thread-safe blocking concurrent bounded queue.  
+[<a class="el" href="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="a00335.html">concurrent_queue.h</a>></code>
+<code>#include <<a class="el" href="a00342.html">concurrent_vector.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::deprecated::concurrent_queue< T, A >:
-<p><center><img src="a00161.png" usemap="#tbb::deprecated::concurrent_queue< T, A >_map" border="0" alt=""></center>
-<map name="tbb::deprecated::concurrent_queue< T, A >_map">
-<area href="a00155.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">
+<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="8861a9cdf232a20b5f2569754a281871"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::iterator" ref="8861a9cdf232a20b5f2569754a281871" args="" -->
-typedef <a class="el" href="a00155.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="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="7117842ce3ed7c5147d3c886922e64d0"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::const_iterator" ref="7117842ce3ed7c5147d3c886922e64d0" args="" -->
-typedef <a class="el" href="a00155.html">concurrent_bounded_queue</a><<br>
- T, A >::const_iterator </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="a00161.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a> (const A &a=A())</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c8ca9cabfcd30ad5943324c853664b5"></a><!-- doxytag: member="tbb::concurrent_vector::concurrent_vector" ref="2c8ca9cabfcd30ad5943324c853664b5" args="(const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="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">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="a00161.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a> (const <a class="el" href="a00161.html">concurrent_queue</a> &src, const A &a=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">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="a00161.html#9102b897776bd2d9e908e6604ff16b5f">concurrent_queue</a> (InputIterator b, InputIterator e, const A &a=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">[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="a00161.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a> (const T &source)</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">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="a00161.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a> (T &destination)</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">Attempt to dequeue an item from head of queue.  <a href="#48da3536245318af6cb5fd58bac78039"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed7202cd273ae36463e6ac57e9472670"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::begin" ref="ed7202cd273ae36463e6ac57e9472670" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">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="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="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="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="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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d42ddc4a6fe42350750a930302863d1"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::end" ref="3d42ddc4a6fe42350750a930302863d1" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+<tr><td class="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="05bffad9626d51abbd4bb82ae2a1cceb"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::internal::concurrent_queue_iterator" ref="05bffad9626d51abbd4bb82ae2a1cceb" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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 = cache_aligned_allocator<T>><br>
- class tbb::deprecated::concurrent_queue< T, A ></h3>
+<h3>template<typename T, class A><br>
+ class tbb::concurrent_vector< T, A ></h3>
 
-A high-performance thread-safe blocking concurrent bounded queue. 
+Concurrent vector container. 
 <p>
-This is the pre-PPL TBB concurrent queue which support boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+<a class="el" href="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="48da3536245318af6cb5fd58bac78039"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::pop_if_present" ref="48da3536245318af6cb5fd58bac78039" args="(T &destination)" -->
+<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 = cache_aligned_allocator<T>> </div>
+template<typename T, class A> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00161.html">tbb::deprecated::concurrent_queue</a>< T, A >::pop_if_present           </td>
+          <td class="memname">void <a class="el" href="a00161.html">tbb::concurrent_vector</a>< T, A >::clear           </td>
           <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"> <em>destination</em>          </td>
+          <td class="paramname">          </td>
           <td> ) </td>
           <td width="100%"><code> [inline]</code></td>
         </tr>
@@ -111,23 +350,226 @@ template<typename T, class A = cache_aligned_allocator<T>> </div>
 <div class="memdoc">
 
 <p>
-Attempt to dequeue an item from head of queue. 
+Clear container while keeping memory allocated. 
 <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="a00155.html#0ca487019bbb00a196442aff78a1e4f7">try_pop()</a> </dd></dl>
+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="7c45561bafe71107d09b2bc1b8f4e681"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::push_if_not_full" ref="7c45561bafe71107d09b2bc1b8f4e681" args="(const T &source)" -->
+<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 = cache_aligned_allocator<T>> </div>
+template<typename T, class A> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00161.html">tbb::deprecated::concurrent_queue</a>< T, A >::push_if_not_full           </td>
+          <td class="memname">void <a class="el" href="a00161.html">tbb::concurrent_vector</a>< T, A >::reserve           </td>
           <td>(</td>
-          <td class="paramtype">const T & </td>
-          <td class="paramname"> <em>source</em>          </td>
+          <td class="paramtype">size_type </td>
+          <td class="paramname"> <em>n</em>          </td>
           <td> ) </td>
           <td width="100%"><code> [inline]</code></td>
         </tr>
@@ -136,13 +578,13 @@ template<typename T, class A = cache_aligned_allocator<T>> </div>
 <div class="memdoc">
 
 <p>
-Enqueue an item at tail of queue if queue is not already full. 
+Allocate enough space to grow to size n without having to allocate more memory later. 
 <p>
-Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. 
+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="a00335.html">concurrent_queue.h</a></ul>
+<li><a class="el" href="a00342.html">concurrent_vector.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00162.html b/doc/html/a00162.html
index feece1c..774ea02 100644
--- a/doc/html/a00162.html
+++ b/doc/html/a00162.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
+<title>tbb::empty_task Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,570 +21,28 @@
     <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">concurrent_vector</a></div>
-<h1>tbb::concurrent_vector< T, A > Class Template Reference<br>
+<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="a00275.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::concurrent_vector" -->Concurrent vector container.  
+[<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="a00341.html">concurrent_vector.h</a>></code>
+<code>#include <<a class="el" href="a00433.html">task.h</a>></code>
 <p>
-<a href="a00026.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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>
-<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="a00162.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="a00162.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="a00162.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="a00162.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a> (const <a class="el" href="a00162.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="a00162.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a> (const <a class="el" href="a00162.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="a00162.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="a00162.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="a00162.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="a00162.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html#691f0f3cda3e489c37a657016e375eaf">operator=</a> (const <a class="el" href="a00162.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="a00162.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a> (const <a class="el" href="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.html#1693d1da41b1a8235871be9c6633be35">compact</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a> (<a class="el" href="a00162.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="a00162.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="a00162.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. 
+task that does nothing. Useful for synchronization. 
 <p>
-<a class="el" href="a00162.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="a00162.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="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">concurrent_vector::size()</a> and <a class="el" href="a00162.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least()</a> methods to assure elements are allocated.</li><li>Methods <a class="el" href="a00162.html#c0b51160e5a764982ec97a455f94f2c6">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00341.html">concurrent_vector.h</a></ul>
+<li><a class="el" href="a00433.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00163.png b/doc/html/a00162.png
similarity index 100%
rename from doc/html/a00163.png
rename to doc/html/a00162.png
diff --git a/doc/html/a00163.html b/doc/html/a00163.html
index 2a662f0..65c82ce 100644
--- a/doc/html/a00163.html
+++ b/doc/html/a00163.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::empty_task Class Reference</title>
+<title>tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,28 +21,171 @@
     <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="a00163.html">empty_task</a></div>
-<h1>tbb::empty_task Class Reference<br>
+<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="a00279.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::empty_task" --><!-- doxytag: inherits="tbb::task" -->task that does nothing. Useful for synchronization.  
+[<a class="el" href="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="a00427.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00354.html">enumerable_thread_specific.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::empty_task:
-<p><center><img src="a00163.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">
+<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>
-task that does nothing. Useful for synchronization. 
+<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="a00427.html">task.h</a></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.
diff --git a/doc/html/a00164.html b/doc/html/a00164.html
index 76cc614..8f0e1c6 100644
--- a/doc/html/a00164.html
+++ b/doc/html/a00164.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference</title>
+<title>tbb::filter Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,171 +21,130 @@
     <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="a00164.html">enumerable_thread_specific</a></div>
-<h1>tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference<br>
+<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">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::interface5::enumerable_thread_specific" -->The <a class="el" href="a00164.html">enumerable_thread_specific</a> container.  
+[<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="a00353.html">enumerable_thread_specific.h</a>></code>
+<code>#include <<a class="el" href="a00414.html">pipeline.h</a>></code>
 <p>
-<a href="a00031.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::filter:
+<p><center><img src="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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="da7721b6c35d333ec89a37b63d0d82d3"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::allocator_type" ref="da7721b6c35d333ec89a37b63d0d82d3" args="" -->
-typedef Allocator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#da7721b6c35d333ec89a37b63d0d82d3">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="976852701d9d4018bca74907c80422af"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::value_type" ref="976852701d9d4018bca74907c80422af" 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="ca057d1cd23e99fb9d391d4af32ea3c3"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::reference" ref="ca057d1cd23e99fb9d391d4af32ea3c3" 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="518d24e759a14ed3d4b5ad13abc54b4c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::const_reference" ref="518d24e759a14ed3d4b5ad13abc54b4c" 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="68d25e2e57106ce3805f8f14b9c13d8c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::pointer" ref="68d25e2e57106ce3805f8f14b9c13d8c" 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="dc48472e808339c40eb55c3fa4e68dc5"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::const_pointer" ref="dc48472e808339c40eb55c3fa4e68dc5" 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="5c822bff644fb5245386486cc1ddaf7c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::size_type" ref="5c822bff644fb5245386486cc1ddaf7c" 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="5e3fa161ff14516769519d3a555ccfb3"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::difference_type" ref="5e3fa161ff14516769519d3a555ccfb3" 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="00c3c2708bf7618b80060c2703aaf261"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::iterator" ref="00c3c2708bf7618b80060c2703aaf261" args="" -->
-typedef internal::enumerable_thread_specific_iterator<<br>
- <a class="el" href="a00162.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="c575f3574d5d82b98e6a07314dcdc17f"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::const_iterator" ref="c575f3574d5d82b98e6a07314dcdc17f" args="" -->
-typedef internal::enumerable_thread_specific_iterator<<br>
- <a class="el" href="a00162.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="b914933105a8b56b961dd87c35908077"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::range_type" ref="b914933105a8b56b961dd87c35908077" 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="c914d5e2d64af34ae7399010057999c9"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::const_range_type" ref="c914d5e2d64af34ae7399010057999c9" 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="ca9994099ebd88e92be061452687422e"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="ca9994099ebd88e92be061452687422e" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ca9994099ebd88e92be061452687422e">enumerable_thread_specific</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor, which leads to default construction of local copies. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="724ed4c846493da62b4efe032e16eb4a"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="724ed4c846493da62b4efe032e16eb4a" 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="a00164.html#724ed4c846493da62b4efe032e16eb4a">enumerable_thread_specific</a> (Finit _finit)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">construction with initializer method <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="105a6487c8c4113ba89891b75243780c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="105a6487c8c4113ba89891b75243780c" args="(const T &_exemplar)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#105a6487c8c4113ba89891b75243780c">enumerable_thread_specific</a> (const T &_exemplar)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constuction with exemplar, which leads to copy construction of local copies. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f6e5b3654712ea003cbb7ebaffa8dd9"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::~enumerable_thread_specific" ref="7f6e5b3654712ea003cbb7ebaffa8dd9" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#7f6e5b3654712ea003cbb7ebaffa8dd9">~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="8bcc55bfecc81937872b13f6db962b16"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::local" ref="8bcc55bfecc81937872b13f6db962b16" args="()" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#8bcc55bfecc81937872b13f6db962b16">local</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fcfec27656a69ff2072802ac001e936f"></a><!-- doxytag: member="tbb::filter::is_serial" ref="fcfec27656a69ff2072802ac001e936f" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#fcfec27656a69ff2072802ac001e936f">is_serial</a> () const </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="34423652c3add42563b1d5d44ca78158"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::local" ref="34423652c3add42563b1d5d44ca78158" args="(bool &exists)" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#34423652c3add42563b1d5d44ca78158">local</a> (bool &exists)</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">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="101ecd32efae3ce1331c3d8a791c645b"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::size" ref="101ecd32efae3ce1331c3d8a791c645b" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#101ecd32efae3ce1331c3d8a791c645b">size</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">Get the number of local copies. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="af91306d8e10e093226788a733ee59b4"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::empty" ref="af91306d8e10e093226788a733ee59b4" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#af91306d8e10e093226788a733ee59b4">empty</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">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="efd1e3d008ec5cd69c6b10c6dcac1e2c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::begin" ref="efd1e3d008ec5cd69c6b10c6dcac1e2c" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#efd1e3d008ec5cd69c6b10c6dcac1e2c">begin</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Operate on an item from the input stream, and return item for output stream.  <a href="#fa1b3dc1f4f47563ccab7f4d92f5b543"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#66d159f362293e3964ba3da8bc1d2604">~filter</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="3156594e622924c094c45faa261dba5a"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::end" ref="3156594e622924c094c45faa261dba5a" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#3156594e622924c094c45faa261dba5a">end</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">end iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f94cdb3a743e8b57c70dcb1041cfdf9"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::begin" ref="5f94cdb3a743e8b57c70dcb1041cfdf9" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#5f94cdb3a743e8b57c70dcb1041cfdf9">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="9909c01ec91ef10908c5155d6350db2d"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::end" ref="9909c01ec91ef10908c5155d6350db2d" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#9909c01ec91ef10908c5155d6350db2d">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="ab3f04b8d355b5d311e955d3bb63562c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::range" ref="ab3f04b8d355b5d311e955d3bb63562c" args="(size_t grainsize=1)" -->
-range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#ab3f04b8d355b5d311e955d3bb63562c">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="48f5ab20db3c77faa7219deb28076e6c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::range" ref="48f5ab20db3c77faa7219deb28076e6c" args="(size_t grainsize=1) const " -->
-const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#48f5ab20db3c77faa7219deb28076e6c">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="e7be0d504ba71ae6c7479eb373a361ab"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::clear" ref="e7be0d504ba71ae6c7479eb373a361ab" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#e7be0d504ba71ae6c7479eb373a361ab">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="a2f7ac9445823125ad1df2aaa06b5b92"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="a2f7ac9445823125ad1df2aaa06b5b92" 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="a00164.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8efb1e66e999d19e293964876da6414c"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::enumerable_thread_specific" ref="8efb1e66e999d19e293964876da6414c" args="(const enumerable_thread_specific &other)" -->
- </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00164.html">enumerable_thread_specific</a> &other)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9b097f10dc5f035c73a0393b1820f4d"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::operator=" ref="a9b097f10dc5f035c73a0393b1820f4d" args="(const enumerable_thread_specific &other)" -->
-<a class="el" href="a00164.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00164.html">enumerable_thread_specific</a> &other)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f96ff60333760809cbf29850ed31cae3"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::operator=" ref="f96ff60333760809cbf29850ed31cae3" 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="a00164.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00164.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="8203013705240cba76052ec7b828aaa8"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::combine" ref="8203013705240cba76052ec7b828aaa8" 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="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="memTemplParams" nowrap colspan="2"><a class="anchor" name="665463cc7bb56143d9cdbb35fc3616b0"></a><!-- doxytag: member="tbb::interface5::enumerable_thread_specific::combine_each" ref="665463cc7bb56143d9cdbb35fc3616b0" args="(combine_func_t f_combine)" -->
-template<typename combine_func_t> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>combine_each</b> (combine_func_t f_combine)</td></tr>
+<tr><td class="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 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::interface5::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 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 colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>generic_range_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43b69a482df8e053cb199af69eb5139"></a><!-- doxytag: member="tbb::filter::thread_bound_filter" ref="e43b69a482df8e053cb199af69eb5139" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">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::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></h3>
+A stage in a pipeline. 
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="66d159f362293e3964ba3da8bc1d2604"></a><!-- doxytag: member="tbb::filter::~filter" ref="66d159f362293e3964ba3da8bc1d2604" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual __TBB_EXPORTED_METHOD tbb::filter::~filter           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-The <a class="el" href="a00164.html">enumerable_thread_specific</a> container. 
 <p>
-<a class="el" href="a00164.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="a00164.html#e7be0d504ba71ae6c7479eb373a361ab">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="a00164.html">enumerable_thread_specific</a> containers may be copy-constructed or assigned. [...]
+Destroy filter. 
 <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="a00164.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>
+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="a00353.html">enumerable_thread_specific.h</a></ul>
+<li><a class="el" href="a00414.html">pipeline.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00165.png b/doc/html/a00164.png
similarity index 100%
rename from doc/html/a00165.png
rename to doc/html/a00164.png
diff --git a/doc/html/a00165.html b/doc/html/a00165.html
index d7bac4c..a0ff3f0 100644
--- a/doc/html/a00165.html
+++ b/doc/html/a00165.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::filter Class Reference</title>
+<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>
@@ -21,130 +21,50 @@
     <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="a00165.html">filter</a></div>
-<h1>tbb::filter Class Reference<br>
-<small>
-[<a class="el" href="a00274.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::filter" -->A stage in a pipeline.  
+<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="a00409.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00414.html">pipeline.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::filter:
-<p><center><img src="a00165.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">
+<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="fcfec27656a69ff2072802ac001e936f"></a><!-- doxytag: member="tbb::filter::is_serial" ref="fcfec27656a69ff2072802ac001e936f" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html#fcfec27656a69ff2072802ac001e936f">is_serial</a> () const </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="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="a00165.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a> () const </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="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="a00165.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a> () const </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="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="a00165.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a> (void *item)=0</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 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="a00165.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="a00165.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="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="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="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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43b69a482df8e053cb199af69eb5139"></a><!-- doxytag: member="tbb::filter::thread_bound_filter" ref="e43b69a482df8e053cb199af69eb5139" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>thread_bound_filter</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">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>
-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">
+<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>
-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="a00409.html">pipeline.h</a></ul>
+<li><a class="el" href="a00414.html">pipeline.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00166.html b/doc/html/a00166.html
index c74d628..a536980 100644
--- a/doc/html/a00166.html
+++ b/doc/html/a00166.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::interface5::filter_t< T, U > Class Template Reference</title>
+<title>tbb::final_scan_tag Struct Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,49 +21,27 @@
     <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="a00166.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 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="a00409.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00396.html">parallel_scan.h</a>></code>
 <p>
-<a href="a00053.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00042.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00166.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="a00166.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="a00166.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><b>make_filter</b> (tbb::filter::mode, const Body &)</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="a00166.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><b>operator &</b> (const <a class="el" href="a00166.html">filter_t</a>< T_, V_ > &, const <a class="el" href="a00166.html">filter_t</a>< V_, U_ > &)</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>
-<h3>template<typename T, typename U><br>
- class tbb::interface5::filter_t< T, U ></h3>
-
-Class representing a chain of type-safe pipeline filters. 
+Used to indicate that the final scan is being performed. 
 <p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00409.html">pipeline.h</a></ul>
+<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.
diff --git a/doc/html/a00167.html b/doc/html/a00167.html
index a523e47..45f1df3 100644
--- a/doc/html/a00167.html
+++ b/doc/html/a00167.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::final_scan_tag Struct Reference</title>
+<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>
@@ -21,27 +21,28 @@
     <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="a00167.html">final_scan_tag</a></div>
-<h1>tbb::final_scan_tag Struct Reference<br>
-<small>
-[<a class="el" href="a00274.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::final_scan_tag" -->Used to indicate that the final scan is being performed.  
+<a class="el" href="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="a00391.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00414.html">pipeline.h</a>></code>
 <p>
-<a href="a00042.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00052.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06888e4a548788fcb2c15542d428d8c9"></a><!-- doxytag: member="tbb::final_scan_tag::is_final_scan" ref="06888e4a548788fcb2c15542d428d8c9" args="()" -->
-static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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>
-Used to indicate that the final scan is being performed. 
+input_filter control to signal end-of-input for parallel_pipeline 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00391.html">parallel_scan.h</a></ul>
+<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.
diff --git a/doc/html/a00168.html b/doc/html/a00168.html
index 8b85fc9..cc97337 100644
--- a/doc/html/a00168.html
+++ b/doc/html/a00168.html
@@ -25,7 +25,7 @@
 <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="a00453.html">tbb_exception.h</a>></code>
+<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>
@@ -38,7 +38,7 @@ const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () c
 Exception for PPL locks. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00453.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00169.html b/doc/html/a00169.html
index 7e94816..4907b53 100644
--- a/doc/html/a00169.html
+++ b/doc/html/a00169.html
@@ -25,7 +25,7 @@
 <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="a00453.html">tbb_exception.h</a>></code>
+<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>
@@ -38,7 +38,7 @@ const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () c
 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="a00453.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00170.html b/doc/html/a00170.html
index 9122906..9bff25f 100644
--- a/doc/html/a00170.html
+++ b/doc/html/a00170.html
@@ -25,7 +25,7 @@
 <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="a00453.html">tbb_exception.h</a>></code>
+<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>
@@ -38,7 +38,7 @@ const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () c
 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="a00453.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00171.html b/doc/html/a00171.html
index ca54bca..05eb181 100644
--- a/doc/html/a00171.html
+++ b/doc/html/a00171.html
@@ -25,7 +25,7 @@
 <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="a00453.html">tbb_exception.h</a>></code>
+<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>
@@ -159,7 +159,7 @@ Implements <a class="el" href="a00206.html#8588e07fa49692f4d734e4f2e4f048f4">tbb
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00453.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00172.html b/doc/html/a00172.html
index 65621cf..f1fdb78 100644
--- a/doc/html/a00172.html
+++ b/doc/html/a00172.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00362.html">mutex.h</a>></code>
+<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>
@@ -124,7 +124,7 @@ 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="a00362.html">mutex.h</a></ul>
+<li><a class="el" href="a00367.html">mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00173.html b/doc/html/a00173.html
index 609542c..acdd664 100644
--- a/doc/html/a00173.html
+++ b/doc/html/a00173.html
@@ -25,7 +25,7 @@
 <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="a00362.html">mutex.h</a>></code>
+<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>
@@ -65,7 +65,7 @@ The scoped locking pattern.
 It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00362.html">mutex.h</a></ul>
+<li><a class="el" href="a00367.html">mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00174.html b/doc/html/a00174.html
index 1f51cb6..d491ee8 100644
--- a/doc/html/a00174.html
+++ b/doc/html/a00174.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00364.html">null_mutex.h</a>></code>
+<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>
@@ -53,7 +53,7 @@ A mutex which does nothing.
 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="a00364.html">null_mutex.h</a></ul>
+<li><a class="el" href="a00369.html">null_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00175.html b/doc/html/a00175.html
index 03906e3..6a938c6 100644
--- a/doc/html/a00175.html
+++ b/doc/html/a00175.html
@@ -25,7 +25,7 @@
 <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="a00364.html">null_mutex.h</a>></code>
+<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>
@@ -47,7 +47,7 @@ void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></
 Represents acquisition of a mutex. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00364.html">null_mutex.h</a></ul>
+<li><a class="el" href="a00369.html">null_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00176.html b/doc/html/a00176.html
index 886e5c3..fd0aa0a 100644
--- a/doc/html/a00176.html
+++ b/doc/html/a00176.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00365.html">null_rw_mutex.h</a>></code>
+<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>
@@ -53,7 +53,7 @@ A rw mutex which does nothing.
 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="a00365.html">null_rw_mutex.h</a></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.
diff --git a/doc/html/a00177.html b/doc/html/a00177.html
index 76cbb7e..3405736 100644
--- a/doc/html/a00177.html
+++ b/doc/html/a00177.html
@@ -25,7 +25,7 @@
 <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="a00365.html">null_rw_mutex.h</a>></code>
+<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>
@@ -53,7 +53,7 @@ void </td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></
 Represents acquisition of a mutex. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00365.html">null_rw_mutex.h</a></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.
diff --git a/doc/html/a00178.html b/doc/html/a00178.html
index 4ce4ca1..38b69aa 100644
--- a/doc/html/a00178.html
+++ b/doc/html/a00178.html
@@ -25,7 +25,7 @@
 <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="a00366.html">parallel_do.h</a>></code>
+<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>
@@ -53,7 +53,7 @@ Class the user supplied algorithm body uses to add new tasks.
 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00366.html">parallel_do.h</a></ul>
+<li><a class="el" href="a00371.html">parallel_do.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00179.html b/doc/html/a00179.html
index df29520..df15ef5 100644
--- a/doc/html/a00179.html
+++ b/doc/html/a00179.html
@@ -24,11 +24,11 @@
 <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="a00274.html">Algorithms</a>]</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="a00400.html">parallel_while.h</a>></code>
+<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>
@@ -128,7 +128,7 @@ A Stream s has the requirements <br>
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00400.html">parallel_while.h</a></ul>
+<li><a class="el" href="a00405.html">parallel_while.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00180.html b/doc/html/a00180.html
index 2dab623..63434d8 100644
--- a/doc/html/a00180.html
+++ b/doc/html/a00180.html
@@ -24,11 +24,11 @@
 <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="a00274.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::pipeline" -->A processing pipeling that applies filters to items.  
+[<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="a00409.html">pipeline.h</a>></code>
+<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>
@@ -40,7 +40,7 @@ __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a clas
 <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="a00165.html">filter</a> &filter_)</td></tr>
+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)" -->
@@ -76,7 +76,7 @@ class </td><td class="memItemRight" valign="bottom"><b>tbb::interface5::int
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A processing pipeling that applies filters to items. 
+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="()" -->
@@ -99,7 +99,7 @@ Though the current implementation declares the destructor virtual, do not rely o
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00409.html">pipeline.h</a></ul>
+<li><a class="el" href="a00414.html">pipeline.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00181.html b/doc/html/a00181.html
index a5bbd5e..76df8ff 100644
--- a/doc/html/a00181.html
+++ b/doc/html/a00181.html
@@ -24,11 +24,11 @@
 <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="a00274.html">Algorithms</a>]</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="a00391.html">parallel_scan.h</a>></code>
+<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>
@@ -41,7 +41,7 @@ static bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan<
 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="a00391.html">parallel_scan.h</a></ul>
+<li><a class="el" href="a00396.html">parallel_scan.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00182.html b/doc/html/a00182.html
index 1446339..a3bde33 100644
--- a/doc/html/a00182.html
+++ b/doc/html/a00182.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00420.html">queuing_mutex.h</a>></code>
+<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>
@@ -63,7 +63,7 @@ class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td>
 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="a00420.html">queuing_mutex.h</a></ul>
+<li><a class="el" href="a00426.html">queuing_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00183.html b/doc/html/a00183.html
index e014c8b..ffdc301 100644
--- a/doc/html/a00183.html
+++ b/doc/html/a00183.html
@@ -25,7 +25,7 @@
 <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="a00420.html">queuing_mutex.h</a>></code>
+<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>
@@ -82,7 +82,7 @@ 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="a00420.html">queuing_mutex.h</a></ul>
+<li><a class="el" href="a00426.html">queuing_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00184.html b/doc/html/a00184.html
index d680ca5..e799d05 100644
--- a/doc/html/a00184.html
+++ b/doc/html/a00184.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00421.html">queuing_rw_mutex.h</a>></code>
+<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>
@@ -69,7 +69,7 @@ Reader-writer lock with local-only spinning.
 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="a00421.html">queuing_rw_mutex.h</a></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.
diff --git a/doc/html/a00185.html b/doc/html/a00185.html
index ebc2b22..e6c23ec 100644
--- a/doc/html/a00185.html
+++ b/doc/html/a00185.html
@@ -25,7 +25,7 @@
 <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="a00421.html">queuing_rw_mutex.h</a>></code>
+<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>
@@ -111,7 +111,7 @@ Returns true if the upgrade happened without re-acquiring the lock and false if
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00421.html">queuing_rw_mutex.h</a></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.
diff --git a/doc/html/a00186.html b/doc/html/a00186.html
index 9fb13cd..00d8f54 100644
--- a/doc/html/a00186.html
+++ b/doc/html/a00186.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00422.html">reader_writer_lock.h</a>></code>
+<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>
@@ -209,7 +209,7 @@ This function does not block. Return Value: True or false, depending on whether
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00422.html">reader_writer_lock.h</a></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.
diff --git a/doc/html/a00187.html b/doc/html/a00187.html
index afe7630..e2b1ba3 100644
--- a/doc/html/a00187.html
+++ b/doc/html/a00187.html
@@ -25,7 +25,7 @@
 <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="a00422.html">reader_writer_lock.h</a>></code>
+<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>
@@ -55,7 +55,7 @@ The scoped lock pattern for write locks.
 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="a00422.html">reader_writer_lock.h</a></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.
diff --git a/doc/html/a00188.html b/doc/html/a00188.html
index 3c6a02f..50186d0 100644
--- a/doc/html/a00188.html
+++ b/doc/html/a00188.html
@@ -25,7 +25,7 @@
 <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="a00422.html">reader_writer_lock.h</a>></code>
+<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>
@@ -53,7 +53,7 @@ class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</
 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="a00422.html">reader_writer_lock.h</a></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.
diff --git a/doc/html/a00189.html b/doc/html/a00189.html
index 34805fe..5ec864e 100644
--- a/doc/html/a00189.html
+++ b/doc/html/a00189.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00423.html">recursive_mutex.h</a>></code>
+<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>
@@ -106,7 +106,7 @@ 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="a00423.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00429.html">recursive_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00190.html b/doc/html/a00190.html
index 6f72ddd..9a901db 100644
--- a/doc/html/a00190.html
+++ b/doc/html/a00190.html
@@ -25,7 +25,7 @@
 <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="a00423.html">recursive_mutex.h</a>></code>
+<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>
@@ -65,7 +65,7 @@ The scoped locking pattern.
 It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00423.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00429.html">recursive_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00191.html b/doc/html/a00191.html
index 217d1ca..f81e926 100644
--- a/doc/html/a00191.html
+++ b/doc/html/a00191.html
@@ -24,11 +24,11 @@
 <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="a00276.html">Memory Allocation</a>]</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="a00424.html">scalable_allocator.h</a>></code>
+<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>
@@ -100,7 +100,7 @@ Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
 The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00424.html">scalable_allocator.h</a></ul>
+<li><a class="el" href="a00430.html">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00192.html b/doc/html/a00192.html
index 37a57d1..15d0809 100644
--- a/doc/html/a00192.html
+++ b/doc/html/a00192.html
@@ -24,11 +24,11 @@
 <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="a00276.html">Memory Allocation</a>]</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="a00424.html">scalable_allocator.h</a>></code>
+<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>
@@ -53,7 +53,7 @@ typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b
 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="a00424.html">scalable_allocator.h</a></ul>
+<li><a class="el" href="a00430.html">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00193.html b/doc/html/a00193.html
index ed3bd5d..185befb 100644
--- a/doc/html/a00193.html
+++ b/doc/html/a00193.html
@@ -24,11 +24,11 @@
 <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="a00274.html">Algorithms</a>]</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="a00404.html">partitioner.h</a>></code>
+<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>
@@ -52,7 +52,7 @@ A simple partitioner.
 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="a00404.html">partitioner.h</a></ul>
+<li><a class="el" href="a00409.html">partitioner.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00194.html b/doc/html/a00194.html
index 5b8f327..b533ca6 100644
--- a/doc/html/a00194.html
+++ b/doc/html/a00194.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00425.html">spin_mutex.h</a>></code>
+<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>
@@ -119,7 +119,7 @@ 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="a00425.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00431.html">spin_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00195.html b/doc/html/a00195.html
index cbc6071..b8e2928 100644
--- a/doc/html/a00195.html
+++ b/doc/html/a00195.html
@@ -25,7 +25,7 @@
 <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="a00425.html">spin_mutex.h</a>></code>
+<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>
@@ -85,7 +85,7 @@ 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="a00425.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00431.html">spin_mutex.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00196.html b/doc/html/a00196.html
index 2622c23..974baff 100644
--- a/doc/html/a00196.html
+++ b/doc/html/a00196.html
@@ -24,11 +24,11 @@
 <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="a00277.html">Synchronization</a>]</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="a00426.html">spin_rw_mutex.h</a>></code>
+<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>
@@ -121,7 +121,7 @@ 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="a00426.html">spin_rw_mutex.h</a></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.
diff --git a/doc/html/a00197.html b/doc/html/a00197.html
index 804c194..117bb7c 100644
--- a/doc/html/a00197.html
+++ b/doc/html/a00197.html
@@ -25,7 +25,7 @@
 <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="a00426.html">spin_rw_mutex.h</a>></code>
+<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>
@@ -111,7 +111,7 @@ Returns true if the upgrade happened without re-acquiring the lock and false if
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00426.html">spin_rw_mutex.h</a></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.
diff --git a/doc/html/a00198.html b/doc/html/a00198.html
index 71b25d5..269a537 100644
--- a/doc/html/a00198.html
+++ b/doc/html/a00198.html
@@ -24,11 +24,11 @@
 <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="a00274.html">Algorithms</a>]</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="a00459.html">tbb_stddef.h</a>></code>
+<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>
@@ -39,7 +39,7 @@ Dummy type that distinguishes splitting constructor from copy constructor.
 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="a00459.html">tbb_stddef.h</a></ul>
+<li><a class="el" href="a00465.html">tbb_stddef.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00199.html b/doc/html/a00199.html
index fb0921f..b6920f2 100644
--- a/doc/html/a00199.html
+++ b/doc/html/a00199.html
@@ -24,16 +24,16 @@
 <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="a00279.html">Task Scheduling</a>]</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="a00427.html">task.h</a>></code>
+<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="a00163.html" alt="tbb::empty_task" shape="rect" coords="0,56,97,80">
+<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>
@@ -524,7 +524,7 @@ 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="a00427.html">task.h</a></ul>
+<li><a class="el" href="a00433.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00200.html b/doc/html/a00200.html
index 054dd46..1dfcd93 100644
--- a/doc/html/a00200.html
+++ b/doc/html/a00200.html
@@ -25,7 +25,7 @@
 <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="a00427.html">task.h</a>></code>
+<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>
@@ -36,7 +36,7 @@ Base class for methods that became static in TBB 3.0.
 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="a00427.html">task.h</a></ul>
+<li><a class="el" href="a00433.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00201.html b/doc/html/a00201.html
index c57da67..47812cf 100644
--- a/doc/html/a00201.html
+++ b/doc/html/a00201.html
@@ -24,11 +24,11 @@
 <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="a00279.html">Task Scheduling</a>]</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="a00427.html">task.h</a>></code>
+<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>
@@ -219,7 +219,7 @@ 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="a00427.html">task.h</a></ul>
+<li><a class="el" href="a00433.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00202.html b/doc/html/a00202.html
index 194ee33..304599f 100644
--- a/doc/html/a00202.html
+++ b/doc/html/a00202.html
@@ -24,11 +24,11 @@
 <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="a00279.html">Task Scheduling</a>]</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="a00427.html">task.h</a>></code>
+<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>
@@ -71,7 +71,7 @@ A list of children.
 Used for method task::spawn_children 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00427.html">task.h</a></ul>
+<li><a class="el" href="a00433.html">task.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00203.html b/doc/html/a00203.html
index 24c2ce3..9e46fe6 100644
--- a/doc/html/a00203.html
+++ b/doc/html/a00203.html
@@ -24,11 +24,11 @@
 <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="a00279.html">Task Scheduling</a>]</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="a00443.html">task_scheduler_init.h</a>></code>
+<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>
@@ -152,7 +152,7 @@ The number_of_threads is ignored if any other task_scheduler_inits currently exi
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00443.html">task_scheduler_init.h</a></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.
diff --git a/doc/html/a00204.html b/doc/html/a00204.html
index 47f153a..c445927 100644
--- a/doc/html/a00204.html
+++ b/doc/html/a00204.html
@@ -24,11 +24,11 @@
 <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="a00276.html">Memory Allocation</a>]</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="a00447.html">tbb_allocator.h</a>></code>
+<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>
@@ -118,7 +118,7 @@ Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
 The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. 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="a00447.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00453.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00205.html b/doc/html/a00205.html
index 1da6c0a..15e6ac8 100644
--- a/doc/html/a00205.html
+++ b/doc/html/a00205.html
@@ -24,11 +24,11 @@
 <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="a00276.html">Memory Allocation</a>]</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="a00447.html">tbb_allocator.h</a>></code>
+<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>
@@ -53,7 +53,7 @@ typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b
 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="a00447.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00453.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00206.html b/doc/html/a00206.html
index 7eead76..ef07af1 100644
--- a/doc/html/a00206.html
+++ b/doc/html/a00206.html
@@ -25,12 +25,12 @@
 <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="a00453.html">tbb_exception.h</a>></code>
+<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="a00153.html" alt="tbb::captured_exception" shape="rect" coords="0,56,248,80">
+<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">
@@ -62,7 +62,7 @@ Interface to be implemented by all exceptions TBB recognizes and propagates acro
 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="a00153.html">tbb::captured_exception</a> and template class <a class="el" href="a00171.html">tbb::movable_exception</a>. See their declarations for more info. 
+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" -->
@@ -85,7 +85,7 @@ Destroys objects created by the <a class="el" href="a00206.html#3e3482bf264d4ca4
 <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="a00153.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, and <a class="el" href="a00171.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>.
+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" -->
@@ -108,7 +108,7 @@ Creates and returns pointer to the deep copy of this exception object.
 <p>
 Move semantics is allowed. 
 <p>
-Implemented in <a class="el" href="a00153.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, and <a class="el" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>.
+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)" -->
@@ -152,11 +152,11 @@ 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="a00153.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, and <a class="el" href="a00171.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>.
+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="a00453.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00207.html b/doc/html/a00207.html
index ce332cc..642e1eb 100644
--- a/doc/html/a00207.html
+++ b/doc/html/a00207.html
@@ -25,7 +25,7 @@
 <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="a00453.html">tbb_exception.h</a>></code>
+<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>
@@ -45,7 +45,7 @@ static <a class="el" href="a00207.html">tbb_exception_ptr</a> * </td><td cl
 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="a00153.html">captured_exception</a> &src)</td></tr>
+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>
@@ -77,7 +77,7 @@ Note that objects of this type can be created only by the allocate() method.
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00453.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00459.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00208.html b/doc/html/a00208.html
index ea2c89f..2ca1daf 100644
--- a/doc/html/a00208.html
+++ b/doc/html/a00208.html
@@ -25,7 +25,7 @@
 <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="a00325.html">concurrent_hash_map.h</a>></code>
+<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>
@@ -44,7 +44,7 @@ static bool </td><td class="memItemRight" valign="bottom"><b>equal</b> (con
 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="a00325.html">concurrent_hash_map.h</a></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.
diff --git a/doc/html/a00209.html b/doc/html/a00209.html
index 913e80d..825fb0d 100644
--- a/doc/html/a00209.html
+++ b/doc/html/a00209.html
@@ -24,16 +24,16 @@
 <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="a00274.html">Algorithms</a>]</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="a00409.html">pipeline.h</a>></code>
+<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="a00165.html" alt="tbb::filter" shape="rect" coords="0,0,145,24">
+<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>
@@ -111,7 +111,7 @@ This interface is non-blocking. Returns 'success' if an item was processed. Retu
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00409.html">pipeline.h</a></ul>
+<li><a class="el" href="a00414.html">pipeline.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00210.html b/doc/html/a00210.html
index d187626..f4c6fa2 100644
--- a/doc/html/a00210.html
+++ b/doc/html/a00210.html
@@ -24,11 +24,11 @@
 <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="a00278.html">Timing</a>]</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="a00476.html">tick_count.h</a>></code>
+<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>
@@ -56,7 +56,7 @@ static <a class="el" href="a00210.html">tick_count</a> </td><td class="memI
 Absolute timestamp. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00476.html">tick_count.h</a></ul>
+<li><a class="el" href="a00482.html">tick_count.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00211.html b/doc/html/a00211.html
index 1d39455..67770bb 100644
--- a/doc/html/a00211.html
+++ b/doc/html/a00211.html
@@ -25,7 +25,7 @@
 <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="a00476.html">tick_count.h</a>></code>
+<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>
@@ -71,7 +71,7 @@ class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00
 Relative time interval. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00476.html">tick_count.h</a></ul>
+<li><a class="el" href="a00482.html">tick_count.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00212.html b/doc/html/a00212.html
index 4709dd7..0351df6 100644
--- a/doc/html/a00212.html
+++ b/doc/html/a00212.html
@@ -25,7 +25,7 @@
 <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="a00454.html">tbb_machine.h</a>></code>
+<code>#include <<a class="el" href="a00460.html">tbb_machine.h</a>></code>
 <p>
 <a href="a00109.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
@@ -43,7 +43,7 @@ Work around for bug in GNU 3.2 and MSVC compilers.
 Bug is that compiler sometimes returns 0 for __alignof(T) when T has not yet been instantiated. The work-around forces instantiation by forcing computation of sizeof(T) before __alignof(T). 
 <p>
 <hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00454.html">tbb_machine.h</a></ul>
+<li><a class="el" href="a00460.html">tbb_machine.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00213.html b/doc/html/a00213.html
index be4d723..b757b16 100644
--- a/doc/html/a00213.html
+++ b/doc/html/a00213.html
@@ -24,11 +24,11 @@
 <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="a00276.html">Memory Allocation</a>]</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 href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00447.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00453.html">tbb_allocator.h</a>></code>
 <p>
 <a href="a00090.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
@@ -81,7 +81,7 @@ Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
 The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00447.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00453.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00214.html b/doc/html/a00214.html
index 26be386..39c15e1 100644
--- a/doc/html/a00214.html
+++ b/doc/html/a00214.html
@@ -24,11 +24,11 @@
 <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="a00276.html">Memory Allocation</a>]</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 href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00447.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00453.html">tbb_allocator.h</a>></code>
 <p>
 <a href="a00092.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
@@ -56,7 +56,7 @@ typedef base_allocator_type::const_pointer </td><td class="memItemRight" va
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00447.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00453.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00248.html b/doc/html/a00248.html
index 471efb5..9b2a84c 100644
--- a/doc/html/a00248.html
+++ b/doc/html/a00248.html
@@ -21,7 +21,7 @@
   </ul></div>
 <h1>scalable_allocator.h File Reference</h1>
 <p>
-<a href="a00424.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00430.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="a00267.html">tbb</a></td></tr>
@@ -38,23 +38,23 @@
 <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="a00276.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#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="a00276.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#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="a00276.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#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="a00276.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="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="a00276.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="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="a00276.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#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="a00276.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#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="a00276.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (void *ptr)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="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="a00276.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="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>
diff --git a/doc/html/a00267.html b/doc/html/a00267.html
index 2f17efb..7ce88df 100644
--- a/doc/html/a00267.html
+++ b/doc/html/a00267.html
@@ -25,44 +25,44 @@
 <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="a00142.html">aligned_space</a></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="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</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="a00143.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="a00144.html">atomic< void * ></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="a00144.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00144.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html">blocked_range</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="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_range2d</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="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">blocked_range3d</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="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</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="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="a00152.html">cache_aligned_allocator< void ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="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="a00152.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html">combinable</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="a00154.html#_details">More...</a><br></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="a00155.html">concurrent_bounded_queue</a></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="a00155.html#_details">More...</a><br></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="a00162.html">concurrent_vector</a></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="a00162.html#_details">More...</a><br></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>
@@ -78,30 +78,30 @@
 <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="a00167.html">final_scan_tag</a></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="a00167.html#_details">More...</a><br></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="a00146.html">auto_partitioner</a></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="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="a00141.html">affinity_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="a00141.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">filter</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="a00165.html#_details">More...</a><br></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 pipeling that applies filters to items.  <a href="a00180.html#_details">More...</a><br></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>
@@ -129,9 +129,9 @@
 <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="a00163.html">empty_task</a></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="a00163.html#_details">More...</a><br></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>
@@ -156,9 +156,9 @@
 <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="a00147.html">bad_last_alloc</a></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="a00147.html#_details">More...</a><br></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>
@@ -171,9 +171,9 @@
 <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="a00153.html">captured_exception</a></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="a00153.html#_details">More...</a><br></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>
@@ -184,7 +184,7 @@
 
 <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="a00273.html">strict_ppl</a></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>
 
@@ -193,66 +193,66 @@
 <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="a00274.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00274.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="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="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a> (const Range &range, const Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00274.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="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="a00274.html#ga7ac75d532389b55b9247f3fdb0b00d1">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00146.html">auto_partitioner</a> &partitioner)</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="a00146.html">auto_partitioner</a>. <br></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="a00274.html#g9cd1b210ceb1c040f30e390b4a21bde8">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00141.html">affinity_partitioner</a> &partitioner)</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="a00141.html">affinity_partitioner</a>. <br></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="a00274.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="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="a00274.html#g1c0700e3f85e83a788ff3ede88ebb7e9">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00146.html">auto_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00146.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="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="a00274.html#g04b4696b67370c01353ff5974c8f1196">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00141.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00141.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="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="a00274.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="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="a00274.html#gc2d710ca573f0a9bd94379cba3772def">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00274.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="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)" -->
@@ -327,105 +327,105 @@ template<typename F0, typename F1, typename F2, typename F3, typename F4, typ
 <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="a00274.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a> (const Range &range, Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00274.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="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="a00274.html#g18a19157e6245992fc00ca0adeb7dd37">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00146.html">auto_partitioner</a> &partitioner)</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="a00146.html">auto_partitioner</a>. <br></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="a00274.html#gc61e73fcc36c92d79a217fc355ff4a6b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00141.html">affinity_partitioner</a> &partitioner)</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="a00141.html">affinity_partitioner</a>. <br></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="a00274.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="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="a00274.html#g1c1ea1d7c61b3c225e92c70d669a53a5">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00146.html">auto_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00146.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="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="a00274.html#gd9ac3a3811060314695f33b703c6e11b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00141.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00141.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="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="a00274.html#gc9412e09fb01fcad8c018ea9cffb28ef">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00274.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="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="a00274.html#gb175401f0729e40dd2c5860a17c14385">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00146.html">auto_partitioner</a> &partitioner)</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="a00146.html">auto_partitioner</a>. <br></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="a00274.html#gb7f1f1828ae2b330ce05b8513a495154">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00141.html">affinity_partitioner</a> &partitioner)</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="a00141.html">affinity_partitioner</a>. <br></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="a00274.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="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="a00274.html#g630c90a399937d9d4ae70ff883186dfd">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00146.html">auto_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</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="a00146.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="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="a00274.html#g496bd7eadb3b97495ccb5655ef90319e">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00141.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00201.html">task_group_context</a> &context)</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="a00141.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="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="a00274.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a> (const Range &range, Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00274.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="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="a00274.html#g62fde400a37bbca1a2fddc8e3d22f556">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00146.html">auto_partitioner</a> &partitioner)</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="a00146.html">auto_partitioner</a>. <br></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="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa"></a><br></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="a00274.html#g16c3eb77d0e530834c51ce3857f01012">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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="a00274.html#gc7576f82fdedc8a701a6c17ad9415926">parallel_sort</a> (T *begin, T *end)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="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>
@@ -467,56 +467,56 @@ typedef void(*) </td><td class="memItemRight" valign="bottom"><a class="el"
  </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="a00143.html">atomic</a>< T * ></td></tr>
+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="a00151.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00151.html">cache_aligned_allocator</a>< 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="a00151.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00151.html">cache_aligned_allocator</a>< 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="a00156.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00156.html">concurrent_hash_map</a>< Key, T, HashCompare, A2 > &b)</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="a00156.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00156.html">concurrent_hash_map</a>< Key, T, HashCompare, A2 > &b)</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="a00156.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &a, <a class="el" href="a00156.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &b)</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="a00162.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00162.html">concurrent_vector</a>< T, A2 > &b)</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="a00162.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00162.html">concurrent_vector</a>< T, A2 > &b)</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="a00162.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00162.html">concurrent_vector</a>< T, A2 > &b)</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="a00162.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00162.html">concurrent_vector</a>< T, A2 > &b)</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="a00162.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00162.html">concurrent_vector</a>< T, A2 > &b)</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="a00162.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00162.html">concurrent_vector</a>< T, A2 > &b)</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="a00162.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00162.html">concurrent_vector</a>< T, A > &b)</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>
diff --git a/doc/html/a00273.html b/doc/html/a00273.html
deleted file mode 100644
index a5b00eb..0000000
--- a/doc/html/a00273.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::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>
-<!-- Generated by Doxygen 1.4.7 -->
-<div class="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>
-<div class="nav">
-<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00273.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="a00160.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="a00160.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="a00273.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="a00201.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="a00273.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="a00201.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.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the 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 f82736c..576ceec 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>Algorithms</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,331 +9,48 @@
   <ul>
     <li><a href="index.html"><span>Main Page</span></a></li>
     <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+    <li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
     <li><a href="annotated.html"><span>Classes</span></a></li>
     <li><a href="files.html"><span>Files</span></a></li>
     <li><a href="pages.html"><span>Related Pages</span></a></li>
   </ul></div>
-<h1>Algorithms</h1><table border="0" cellpadding="0" cellspacing="0">
+<div class="tabs">
+  <ul>
+    <li><a href="namespaces.html"><span>Namespace List</span></a></li>
+    <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
+  </ul></div>
+<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 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="a00148.html">tbb::blocked_range< Value ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <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_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="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">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="a00150.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="a00167.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="a00167.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="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="a00146.html">tbb::auto_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <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="a00165.html">tbb::filter</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00165.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="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 pipeling 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="a00274.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="a00274.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="a00274.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="a00274.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="a00274.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="a00146.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="a00274.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="a00141.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="a00274.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="a00274.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="a00146.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="a00274.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="a00141.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="a00274.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="a00274.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="a00274.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 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="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="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 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="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="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 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="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="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="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="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="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="a00274.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="a00274.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="a00274.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="a00146.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="a00274.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="a00141.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="a00274.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="a00274.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="a00146.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="a00274.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="a00141.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="a00274.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="a00274.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="a00274.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="a00146.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="a00274.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="a00141.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="a00274.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="a00274.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="a00146.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="a00274.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="a00141.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="a00274.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="a00274.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="a00274.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="a00146.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="a00274.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="a00274.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="a00274.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>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+For internal use only. <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <p></p>
diff --git a/doc/html/a00275.html b/doc/html/a00275.html
index 58f6e66..84943d8 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>Containers</title>
+<title>Algorithms</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -14,31 +14,325 @@
     <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">
+<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="a00154.html">tbb::combinable< T ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">tbb::blocked_range< Value ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00154.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></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">Unordered map from Key to T.  <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="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></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 high-performance thread-safe non-blocking concurrent 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="a00155.html">tbb::concurrent_bounded_queue< T, A ></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">A high-performance thread-safe blocking concurrent bounded queue.  <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="a00161.html">tbb::deprecated::concurrent_queue< T, A ></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">A high-performance thread-safe blocking concurrent bounded queue.  <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="a00162.html">tbb::concurrent_vector< T, A ></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">Concurrent vector container.  <a href="a00162.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></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">The <a class="el" href="a00164.html">enumerable_thread_specific</a> container.  <a href="a00164.html#_details">More...</a><br></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 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="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="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="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 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">
+
+<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.
diff --git a/doc/html/a00276.html b/doc/html/a00276.html
index 5fd0b2d..b07b762 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>Memory Allocation</title>
+<title>Containers</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -14,294 +14,31 @@
     <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">
+<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="a00142.html">tbb::aligned_space< T, N ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html">tbb::combinable< T ></a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements.  <a href="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="a00151.html">tbb::cache_aligned_allocator< 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">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <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="a00152.html">tbb::cache_aligned_allocator< void ></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 class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <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="a00191.html">tbb::scalable_allocator< T ></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="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">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">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">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">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="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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</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 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><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-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00277.html b/doc/html/a00277.html
index bc43e52..ccf8013 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>Synchronization</title>
+<title>Memory Allocation</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -14,40 +14,294 @@
     <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">
+<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">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html">tbb::atomic< T ></a></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">Primary template for atomic.  <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="a00172.html">tbb::mutex</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">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 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">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">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">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">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">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">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">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">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">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 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">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="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">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="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>
 
-<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>
 </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-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00278.html b/doc/html/a00278.html
index 5879d12..d292a79 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>Timing</title>
+<title>Synchronization</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -14,12 +14,39 @@
     <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">
+<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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html">tbb::tick_count</a></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 class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00210.html#_details">More...</a><br></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">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 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">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">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">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">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 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="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="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>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/a00279.html b/doc/html/a00279.html
index 2fa7494..5879d12 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>Task Scheduling</title>
+<title>Timing</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -14,24 +14,12 @@
     <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">
+<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="a00201.html">tbb::task_group_context</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html">tbb::tick_count</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">tbb::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="a00163.html">tbb::empty_task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00163.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html">tbb::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"><a class="el" href="a00203.html">tbb::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="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00210.html#_details">More...</a><br></td></tr>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/a00280.html b/doc/html/a00280.html
index 94ec695..200ccea 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>_concurrent_queue_internal.h Source File</title>
+<title>Task Scheduling</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -11,924 +11,29 @@
     <li><a href="modules.html"><span>Modules</span></a></li>
     <li><a href="namespaces.html"><span>Namespaces</span></a></li>
     <li><a href="annotated.html"><span>Classes</span></a></li>
-    <li id="current"><a href="files.html"><span>Files</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
     <li><a href="pages.html"><span>Related Pages</span></a></li>
   </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
-  </ul></div>
-<h1>_concurrent_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="a00273.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="a00160.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="a00155.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="a00160.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>
+<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="a00201.html">tbb::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">tbb::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">tbb::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">tbb::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"><a class="el" href="a00203.html">tbb::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>
+</table>
+<hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
 <p></p>
diff --git a/doc/html/a00280.html b/doc/html/a00281.html
similarity index 99%
copy from doc/html/a00280.html
copy to doc/html/a00281.html
index 94ec695..610375a 100644
--- a/doc/html/a00280.html
+++ b/doc/html/a00281.html
@@ -68,14 +68,14 @@
 <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="a00273.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="a00160.html">concurrent_queue</a>;
+<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="a00155.html">concurrent_bounded_queue</a>;
+<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="a00160.html">concurrent_queue</a>;
+<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>
diff --git a/doc/html/a00298.html b/doc/html/a00299.html
similarity index 67%
rename from doc/html/a00298.html
rename to doc/html/a00299.html
index 5dbe7df..aacd572 100644
--- a/doc/html/a00298.html
+++ b/doc/html/a00299.html
@@ -63,7 +63,7 @@
 <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 "tbb_machine.h"</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 
@@ -702,739 +702,703 @@
 <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_number_of_buckets(n_of_buckets), my_solist(a),
+<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         internal_init();
-<a name="l00689"></a>00689     }
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691     concurrent_unordered_base(<span class="keyword">const</span> concurrent_unordered_base& right, <span class="keyword">const</span> allocator_type& a)
-<a name="l00692"></a>00692         : Traits(right.my_hash_compare), my_solist(a), my_allocator(a)
-<a name="l00693"></a>00693     {
-<a name="l00694"></a>00694         internal_copy(right);
-<a name="l00695"></a>00695     }
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697     concurrent_unordered_base(<span class="keyword">const</span> concurrent_unordered_base& right)
-<a name="l00698"></a>00698         : Traits(right.my_hash_compare), my_solist(right.get_allocator()), my_allocator(right.get_allocator())
-<a name="l00699"></a>00699     {
-<a name="l00700"></a>00700         internal_init();
-<a name="l00701"></a>00701         internal_copy(right);
-<a name="l00702"></a>00702     }
-<a name="l00703"></a>00703 
-<a name="l00704"></a>00704     concurrent_unordered_base& operator=(<span class="keyword">const</span> concurrent_unordered_base& right) {
-<a name="l00705"></a>00705         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &right)
-<a name="l00706"></a>00706             internal_copy(right);
-<a name="l00707"></a>00707         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
-<a name="l00708"></a>00708     }
-<a name="l00709"></a>00709 
-<a name="l00710"></a>00710     ~concurrent_unordered_base() {
-<a name="l00711"></a>00711         <span class="comment">// Delete all node segments</span>
-<a name="l00712"></a>00712         internal_clear();
-<a name="l00713"></a>00713     }
-<a name="l00714"></a>00714 
-<a name="l00715"></a>00715 <span class="keyword">public</span>:
-<a name="l00716"></a>00716     allocator_type get_allocator()<span class="keyword"> const </span>{
-<a name="l00717"></a>00717         <span class="keywordflow">return</span> my_solist.get_allocator();
-<a name="l00718"></a>00718     }
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720     <span class="comment">// Size and capacity function</span>
-<a name="l00721"></a>00721     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
-<a name="l00722"></a>00722         <span class="keywordflow">return</span> my_solist.empty();
-<a name="l00723"></a>00723     }
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725     size_type size()<span class="keyword"> const </span>{
-<a name="l00726"></a>00726         <span class="keywordflow">return</span> my_solist.size();
-<a name="l00727"></a>00727     }
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729     size_type max_size()<span class="keyword"> const </span>{
-<a name="l00730"></a>00730         <span class="keywordflow">return</span> my_solist.max_size();
-<a name="l00731"></a>00731     }
-<a name="l00732"></a>00732 
-<a name="l00733"></a>00733     <span class="comment">// Iterators </span>
-<a name="l00734"></a>00734     iterator begin() {
-<a name="l00735"></a>00735         <span class="keywordflow">return</span> my_solist.begin();
-<a name="l00736"></a>00736     }
-<a name="l00737"></a>00737 
-<a name="l00738"></a>00738     const_iterator begin()<span class="keyword"> const </span>{
-<a name="l00739"></a>00739         <span class="keywordflow">return</span> my_solist.begin();
-<a name="l00740"></a>00740     }
-<a name="l00741"></a>00741 
-<a name="l00742"></a>00742     iterator end() {
-<a name="l00743"></a>00743         <span class="keywordflow">return</span> my_solist.end();
-<a name="l00744"></a>00744     }
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746     const_iterator end()<span class="keyword"> const </span>{
-<a name="l00747"></a>00747         <span class="keywordflow">return</span> my_solist.end();
-<a name="l00748"></a>00748     }
-<a name="l00749"></a>00749 
-<a name="l00750"></a>00750     const_iterator cbegin()<span class="keyword"> const </span>{
-<a name="l00751"></a>00751         <span class="keywordflow">return</span> my_solist.cbegin();
-<a name="l00752"></a>00752     }
-<a name="l00753"></a>00753 
-<a name="l00754"></a>00754     const_iterator cend()<span class="keyword"> const </span>{
-<a name="l00755"></a>00755         <span class="keywordflow">return</span> my_solist.cend();
-<a name="l00756"></a>00756     }
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758     <span class="comment">// Parallel traversal support</span>
-<a name="l00759"></a>00759     <span class="keyword">class </span>const_range_type : tbb::internal::no_assign {
-<a name="l00760"></a>00760         <span class="keyword">const</span> concurrent_unordered_base &my_table;
-<a name="l00761"></a>00761         raw_const_iterator my_begin_node;
-<a name="l00762"></a>00762         raw_const_iterator my_end_node;
-<a name="l00763"></a>00763         <span class="keyword">mutable</span> raw_const_iterator my_midpoint_node;
-<a name="l00764"></a>00764     <span class="keyword">public</span>:
-<a name="l00766"></a>00766         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::size_type size_type;
-<a name="l00767"></a>00767         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::value_type value_type;
-<a name="l00768"></a>00768         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::reference reference;
-<a name="l00769"></a>00769         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::difference_type difference_type;
-<a name="l00770"></a>00770         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::const_iterator iterator;
-<a name="l00771"></a>00771 
-<a name="l00773"></a>00773         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin_node == my_end_node;}
-<a name="l00774"></a>00774 
-<a name="l00776"></a>00776         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
-<a name="l00777"></a>00777             <span class="keywordflow">return</span> my_midpoint_node != my_end_node;
-<a name="l00778"></a>00778         }
-<a name="l00780"></a>00780         const_range_type( const_range_type &r, split ) : 
-<a name="l00781"></a>00781             my_table(r.my_table), my_end_node(r.my_end_node)
-<a name="l00782"></a>00782         {
-<a name="l00783"></a>00783             r.my_end_node = my_begin_node = r.my_midpoint_node;
-<a name="l00784"></a>00784             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00785"></a>00785             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00786"></a>00786             set_midpoint();
-<a name="l00787"></a>00787             r.set_midpoint();
-<a name="l00788"></a>00788         }
-<a name="l00790"></a>00790         const_range_type( <span class="keyword">const</span> concurrent_unordered_base &a_table ) : 
-<a name="l00791"></a>00791             my_table(a_table), my_begin_node(a_table.my_solist.begin()),
-<a name="l00792"></a>00792             my_end_node(a_table.my_solist.end())
-<a name="l00793"></a>00793         {
-<a name="l00794"></a>00794             set_midpoint();
-<a name="l00795"></a>00795         }
-<a name="l00796"></a>00796         iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_table.my_solist.get_iterator(my_begin_node); }
-<a name="l00797"></a>00797         iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_table.my_solist.get_iterator(my_end_node); }
-<a name="l00799"></a>00799         size_type grainsize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1; }
-<a name="l00800"></a>00800 
-<a name="l00802"></a>00802         <span class="keywordtype">void</span> set_midpoint()<span class="keyword"> const </span>{
-<a name="l00803"></a>00803             <span class="keywordflow">if</span>( my_begin_node == my_end_node ) <span class="comment">// not divisible</span>
-<a name="l00804"></a>00804                 my_midpoint_node = my_end_node;
-<a name="l00805"></a>00805             <span class="keywordflow">else</span> {
-<a name="l00806"></a>00806                 sokey_t begin_key = solist_t::get_safe_order_key(my_begin_node);
-<a name="l00807"></a>00807                 sokey_t end_key = solist_t::get_safe_order_key(my_end_node);
-<a name="l00808"></a>00808                 size_t mid_bucket = __TBB_ReverseBits( begin_key + (end_key-begin_key)/2 ) % my_table.my_number_of_buckets;
-<a name="l00809"></a>00809                 <span class="keywordflow">while</span> ( !my_table.is_initialized(mid_bucket) ) mid_bucket = my_table.get_parent(mid_bucket);
-<a name="l00810"></a>00810                 my_midpoint_node = my_table.my_solist.first_real_iterator(my_table.get_bucket( mid_bucket ));
-<a name="l00811"></a>00811                 <span class="keywordflow">if</span>( my_midpoint_node == my_begin_node )
-<a name="l00812"></a>00812                     my_midpoint_node = my_end_node;
-<a name="l00813"></a>00813 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00814"></a>00814 <span class="preprocessor"></span>                <span class="keywordflow">else</span> {
-<a name="l00815"></a>00815                     sokey_t mid_key = solist_t::get_safe_order_key(my_midpoint_node);
-<a name="l00816"></a>00816                     __TBB_ASSERT( begin_key < mid_key, <span class="stringliteral">"my_begin_node is after my_midpoint_node"</span> );
-<a name="l00817"></a>00817                     __TBB_ASSERT( mid_key <= end_key, <span class="stringliteral">"my_midpoint_node is after my_end_node"</span> );
-<a name="l00818"></a>00818                 }
-<a name="l00819"></a>00819 <span class="preprocessor">#endif // TBB_USE_ASSERT</span>
-<a name="l00820"></a>00820 <span class="preprocessor"></span>            }
-<a name="l00821"></a>00821         }
-<a name="l00822"></a>00822     };
-<a name="l00823"></a>00823 
-<a name="l00824"></a>00824     <span class="keyword">class </span>range_type : <span class="keyword">public</span> const_range_type {
-<a name="l00825"></a>00825     <span class="keyword">public</span>:
-<a name="l00826"></a>00826         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_unordered_base::iterator iterator;
-<a name="l00828"></a>00828         range_type( range_type &r, split ) : const_range_type( r, split() ) {}
-<a name="l00830"></a>00830         range_type( <span class="keyword">const</span> concurrent_unordered_base &a_table ) : const_range_type(a_table) {}
-<a name="l00831"></a>00831 
-<a name="l00832"></a>00832         iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solist_t::get_iterator( const_range_type::begin() ); }
-<a name="l00833"></a>00833         iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solist_t::get_iterator( const_range_type::end() ); }
-<a name="l00834"></a>00834     };
-<a name="l00835"></a>00835 
-<a name="l00836"></a>00836     range_type range() {
-<a name="l00837"></a>00837         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span> );
-<a name="l00838"></a>00838     }
-<a name="l00839"></a>00839 
-<a name="l00840"></a>00840     const_range_type range()<span class="keyword"> const </span>{
-<a name="l00841"></a>00841         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span> );
-<a name="l00842"></a>00842     }
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844     <span class="comment">// Modifiers</span>
-<a name="l00845"></a>00845     std::pair<iterator, bool> insert(<span class="keyword">const</span> value_type& value) {
-<a name="l00846"></a>00846         <span class="keywordflow">return</span> internal_insert(value);
-<a name="l00847"></a>00847     }
-<a name="l00848"></a>00848 
-<a name="l00849"></a>00849     iterator insert(const_iterator, <span class="keyword">const</span> value_type& value) {
-<a name="l00850"></a>00850         <span class="comment">// Ignore hint</span>
-<a name="l00851"></a>00851         <span class="keywordflow">return</span> insert(value).first;
-<a name="l00852"></a>00852     }
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854     <span class="keyword">template</span><<span class="keyword">class</span> Iterator>
-<a name="l00855"></a>00855     <span class="keywordtype">void</span> insert(Iterator first, Iterator last) {
-<a name="l00856"></a>00856         <span class="keywordflow">for</span> (Iterator it = first; it != last; ++it)
-<a name="l00857"></a>00857             insert(*it);
-<a name="l00858"></a>00858     }
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860     iterator unsafe_erase(const_iterator where) {
-<a name="l00861"></a>00861         <span class="keywordflow">return</span> internal_erase(where);
-<a name="l00862"></a>00862     }
-<a name="l00863"></a>00863 
-<a name="l00864"></a>00864     iterator unsafe_erase(const_iterator first, const_iterator last) {
-<a name="l00865"></a>00865         <span class="keywordflow">while</span> (first != last)
-<a name="l00866"></a>00866             unsafe_erase(first++);
-<a name="l00867"></a>00867         <span class="keywordflow">return</span> my_solist.get_iterator(first);
-<a name="l00868"></a>00868     }
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870     size_type unsafe_erase(<span class="keyword">const</span> key_type& key) {
-<a name="l00871"></a>00871         pairii_t where = equal_range(key);
-<a name="l00872"></a>00872         size_type item_count = internal_distance(where.first, where.second);
-<a name="l00873"></a>00873         unsafe_erase(where.first, where.second);
-<a name="l00874"></a>00874         <span class="keywordflow">return</span> item_count;
-<a name="l00875"></a>00875     }
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877     <span class="keywordtype">void</span> swap(concurrent_unordered_base& right) {
-<a name="l00878"></a>00878         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &right) {
-<a name="l00879"></a>00879             std::swap(my_hash_compare, right.my_hash_compare); <span class="comment">// TODO: check what ADL meant here</span>
-<a name="l00880"></a>00880             my_solist.swap(right.my_solist);
-<a name="l00881"></a>00881             internal_swap_buckets(right);
-<a name="l00882"></a>00882             std::swap(my_number_of_buckets, right.my_number_of_buckets);
-<a name="l00883"></a>00883             std::swap(my_maximum_bucket_size, right.my_maximum_bucket_size);
-<a name="l00884"></a>00884         }
-<a name="l00885"></a>00885     }
-<a name="l00886"></a>00886 
-<a name="l00887"></a>00887     <span class="comment">// Observers</span>
-<a name="l00888"></a>00888     <span class="keywordtype">void</span> clear() {
-<a name="l00889"></a>00889         <span class="comment">// Clear list</span>
-<a name="l00890"></a>00890         my_solist.clear();
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892         <span class="comment">// Clear buckets</span>
-<a name="l00893"></a>00893         internal_clear();
-<a name="l00894"></a>00894     }
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896     <span class="comment">// Lookup</span>
-<a name="l00897"></a>00897     iterator find(<span class="keyword">const</span> key_type& key) {
-<a name="l00898"></a>00898         <span class="keywordflow">return</span> internal_find(key);
-<a name="l00899"></a>00899     }
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901     const_iterator find(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
-<a name="l00902"></a>00902         <span class="keywordflow">return</span> const_cast<self_type*>(<span class="keyword">this</span>)->internal_find(key);
-<a name="l00903"></a>00903     }
-<a name="l00904"></a>00904 
-<a name="l00905"></a>00905     size_type count(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
-<a name="l00906"></a>00906         paircc_t answer = equal_range(key);
-<a name="l00907"></a>00907         size_type item_count = internal_distance(answer.first, answer.second);
-<a name="l00908"></a>00908         <span class="keywordflow">return</span> item_count;
-<a name="l00909"></a>00909     }
-<a name="l00910"></a>00910 
-<a name="l00911"></a>00911     std::pair<iterator, iterator> equal_range(<span class="keyword">const</span> key_type& key) {
-<a name="l00912"></a>00912         <span class="keywordflow">return</span> internal_equal_range(key);
-<a name="l00913"></a>00913     }
-<a name="l00914"></a>00914 
-<a name="l00915"></a>00915     std::pair<const_iterator, const_iterator> equal_range(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
-<a name="l00916"></a>00916         <span class="keywordflow">return</span> internal_equal_range(key);
-<a name="l00917"></a>00917     }
-<a name="l00918"></a>00918 
-<a name="l00919"></a>00919     <span class="comment">// Bucket interface - for debugging </span>
-<a name="l00920"></a>00920     size_type unsafe_bucket_count()<span class="keyword"> const </span>{
-<a name="l00921"></a>00921         <span class="keywordflow">return</span> my_number_of_buckets;
-<a name="l00922"></a>00922     }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924     size_type unsafe_max_bucket_count()<span class="keyword"> const </span>{
-<a name="l00925"></a>00925         <span class="keywordflow">return</span> segment_size(pointers_per_table-1);
-<a name="l00926"></a>00926     }
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928     size_type unsafe_bucket_size(size_type bucket) {
-<a name="l00929"></a>00929         size_type item_count = 0;
-<a name="l00930"></a>00930         <span class="keywordflow">if</span> (is_initialized(bucket)) {
-<a name="l00931"></a>00931             raw_iterator it = get_bucket(bucket);
-<a name="l00932"></a>00932             ++it;
-<a name="l00933"></a>00933             <span class="keywordflow">for</span> (; it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy(); ++it)
-<a name="l00934"></a>00934                 ++item_count;
-<a name="l00935"></a>00935         }
-<a name="l00936"></a>00936         <span class="keywordflow">return</span> item_count;
-<a name="l00937"></a>00937     }
-<a name="l00938"></a>00938 
-<a name="l00939"></a>00939     size_type unsafe_bucket(<span class="keyword">const</span> key_type& key)<span class="keyword"> const </span>{
-<a name="l00940"></a>00940         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l00941"></a>00941         size_type bucket = order_key % my_number_of_buckets;
-<a name="l00942"></a>00942         <span class="keywordflow">return</span> bucket;
-<a name="l00943"></a>00943     }
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945     <span class="comment">// If the bucket is initialized, return a first non-dummy element in it</span>
-<a name="l00946"></a>00946     local_iterator unsafe_begin(size_type bucket) {
-<a name="l00947"></a>00947         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l00948"></a>00948             <span class="keywordflow">return</span> end();
-<a name="l00949"></a>00949 
-<a name="l00950"></a>00950         raw_iterator it = get_bucket(bucket);
-<a name="l00951"></a>00951         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
-<a name="l00952"></a>00952     }
-<a name="l00953"></a>00953 
-<a name="l00954"></a>00954     <span class="comment">// If the bucket is initialized, return a first non-dummy element in it</span>
-<a name="l00955"></a>00955     const_local_iterator unsafe_begin(size_type bucket)<span class="keyword"> const</span>
-<a name="l00956"></a>00956 <span class="keyword">    </span>{
-<a name="l00957"></a>00957         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l00958"></a>00958             <span class="keywordflow">return</span> end();
-<a name="l00959"></a>00959 
-<a name="l00960"></a>00960         raw_const_iterator it = get_bucket(bucket);
-<a name="l00961"></a>00961         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
-<a name="l00962"></a>00962     }
-<a name="l00963"></a>00963 
-<a name="l00964"></a>00964     <span class="comment">// @REVIEW: Takes O(n)</span>
-<a name="l00965"></a>00965     <span class="comment">// Returns the iterator after the last non-dummy element in the bucket</span>
-<a name="l00966"></a>00966     local_iterator unsafe_end(size_type bucket)
-<a name="l00967"></a>00967     {
-<a name="l00968"></a>00968         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l00969"></a>00969             <span class="keywordflow">return</span> end();
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971         raw_iterator it = get_bucket(bucket);
-<a name="l00972"></a>00972     
-<a name="l00973"></a>00973         <span class="comment">// Find the end of the bucket, denoted by the dummy element</span>
-<a name="l00974"></a>00974         <span class="keywordflow">do</span> ++it;
-<a name="l00975"></a>00975         <span class="keywordflow">while</span>(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());
-<a name="l00976"></a>00976 
-<a name="l00977"></a>00977         <span class="comment">// Return the first real element past the end of the bucket</span>
-<a name="l00978"></a>00978         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
-<a name="l00979"></a>00979     }
-<a name="l00980"></a>00980 
-<a name="l00981"></a>00981     <span class="comment">// @REVIEW: Takes O(n)</span>
-<a name="l00982"></a>00982     <span class="comment">// Returns the iterator after the last non-dummy element in the bucket</span>
-<a name="l00983"></a>00983     const_local_iterator unsafe_end(size_type bucket)<span class="keyword"> const</span>
-<a name="l00984"></a>00984 <span class="keyword">    </span>{
-<a name="l00985"></a>00985         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l00986"></a>00986             <span class="keywordflow">return</span> end();
-<a name="l00987"></a>00987 
-<a name="l00988"></a>00988         raw_const_iterator it = get_bucket(bucket);
-<a name="l00989"></a>00989     
-<a name="l00990"></a>00990         <span class="comment">// Find the end of the bucket, denoted by the dummy element</span>
-<a name="l00991"></a>00991         <span class="keywordflow">do</span> ++it;
-<a name="l00992"></a>00992         <span class="keywordflow">while</span>(it != my_solist.raw_end() && !it.get_node_ptr()->is_dummy());
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994         <span class="comment">// Return the first real element past the end of the bucket</span>
-<a name="l00995"></a>00995         <span class="keywordflow">return</span> my_solist.first_real_iterator(it);
-<a name="l00996"></a>00996     }
-<a name="l00997"></a>00997 
-<a name="l00998"></a>00998     const_local_iterator unsafe_cbegin(size_type bucket)<span class="keyword"> const </span>{
-<a name="l00999"></a>00999         <span class="keywordflow">return</span> ((<span class="keyword">const</span> self_type *) <span class="keyword">this</span>)->begin();
-<a name="l01000"></a>01000     }
-<a name="l01001"></a>01001 
-<a name="l01002"></a>01002     const_local_iterator unsafe_cend(size_type bucket)<span class="keyword"> const </span>{
-<a name="l01003"></a>01003         <span class="keywordflow">return</span> ((<span class="keyword">const</span> self_type *) <span class="keyword">this</span>)->end();
-<a name="l01004"></a>01004     }
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006     <span class="comment">// Hash policy</span>
-<a name="l01007"></a>01007     <span class="keywordtype">float</span> load_factor()<span class="keyword"> const </span>{
-<a name="l01008"></a>01008         <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) size() / (float) unsafe_bucket_count();
-<a name="l01009"></a>01009     }
-<a name="l01010"></a>01010 
-<a name="l01011"></a>01011     <span class="keywordtype">float</span> max_load_factor()<span class="keyword"> const </span>{
-<a name="l01012"></a>01012         <span class="keywordflow">return</span> my_maximum_bucket_size;
-<a name="l01013"></a>01013     }
-<a name="l01014"></a>01014 
-<a name="l01015"></a>01015     <span class="keywordtype">void</span> max_load_factor(<span class="keywordtype">float</span> newmax) {
-<a name="l01016"></a>01016         <span class="keywordflow">if</span> (newmax != newmax || newmax < 0)
-<a name="l01017"></a>01017             tbb::internal::throw_exception(tbb::internal::eid_invalid_load_factor);
-<a name="l01018"></a>01018         my_maximum_bucket_size = newmax;
-<a name="l01019"></a>01019     }
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021     <span class="comment">// This function is a noop, because the underlying split-ordered list</span>
-<a name="l01022"></a>01022     <span class="comment">// is already sorted, so an increase in the bucket number will be</span>
-<a name="l01023"></a>01023     <span class="comment">// reflected next time this bucket is touched.</span>
-<a name="l01024"></a>01024     <span class="keywordtype">void</span> rehash(size_type buckets) {
-<a name="l01025"></a>01025         size_type current_buckets = my_number_of_buckets;
-<a name="l01026"></a>01026 
-<a name="l01027"></a>01027         <span class="keywordflow">if</span> (current_buckets > buckets)
-<a name="l01028"></a>01028             <span class="keywordflow">return</span>;
-<a name="l01029"></a>01029         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (buckets & (buckets-1)) != 0 )
-<a name="l01030"></a>01030             tbb::internal::throw_exception(tbb::internal::eid_invalid_buckets_number);
-<a name="l01031"></a>01031         my_number_of_buckets = buckets;
-<a name="l01032"></a>01032     }
-<a name="l01033"></a>01033 
-<a name="l01034"></a>01034 <span class="keyword">private</span>:
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036     <span class="comment">// Initialize the hash and keep the first bucket open</span>
-<a name="l01037"></a>01037     <span class="keywordtype">void</span> internal_init() {
-<a name="l01038"></a>01038         <span class="comment">// Allocate an array of segment pointers</span>
-<a name="l01039"></a>01039         memset(my_buckets, 0, pointers_per_table * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *));
-<a name="l01040"></a>01040 
-<a name="l01041"></a>01041         <span class="comment">// Insert the first element in the split-ordered list</span>
-<a name="l01042"></a>01042         raw_iterator dummy_node = my_solist.raw_begin();
-<a name="l01043"></a>01043         set_bucket(0, dummy_node);
-<a name="l01044"></a>01044     }
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046     <span class="keywordtype">void</span> internal_clear() {
-<a name="l01047"></a>01047         <span class="keywordflow">for</span> (size_type index = 0; index < pointers_per_table; ++index) {
-<a name="l01048"></a>01048             <span class="keywordflow">if</span> (my_buckets[index] != NULL) {
-<a name="l01049"></a>01049                 size_type sz = segment_size(index);
-<a name="l01050"></a>01050                 <span class="keywordflow">for</span> (size_type index2 = 0; index2 < sz; ++index2)
-<a name="l01051"></a>01051                     my_allocator.destroy(&my_buckets[index][index2]);
-<a name="l01052"></a>01052                 my_allocator.deallocate(my_buckets[index], sz);
-<a name="l01053"></a>01053                 my_buckets[index] = 0;
-<a name="l01054"></a>01054             }
-<a name="l01055"></a>01055         }
-<a name="l01056"></a>01056     }
-<a name="l01057"></a>01057 
-<a name="l01058"></a>01058     <span class="keywordtype">void</span> internal_copy(<span class="keyword">const</span> self_type& right) {
-<a name="l01059"></a>01059         clear();
-<a name="l01060"></a>01060 
-<a name="l01061"></a>01061         my_maximum_bucket_size = right.my_maximum_bucket_size;
-<a name="l01062"></a>01062         my_number_of_buckets = right.my_number_of_buckets;
-<a name="l01063"></a>01063 
-<a name="l01064"></a>01064         __TBB_TRY {
-<a name="l01065"></a>01065             insert(right.begin(), right.end());
-<a name="l01066"></a>01066             my_hash_compare = right.my_hash_compare;
-<a name="l01067"></a>01067         } __TBB_CATCH(...) {
-<a name="l01068"></a>01068             my_solist.clear();
-<a name="l01069"></a>01069             __TBB_RETHROW();
-<a name="l01070"></a>01070         }
-<a name="l01071"></a>01071     }
-<a name="l01072"></a>01072 
-<a name="l01073"></a>01073     <span class="keywordtype">void</span> internal_swap_buckets(concurrent_unordered_base& right)
-<a name="l01074"></a>01074     {
-<a name="l01075"></a>01075         <span class="comment">// Swap all node segments</span>
-<a name="l01076"></a>01076         <span class="keywordflow">for</span> (size_type index = 0; index < pointers_per_table; ++index)
-<a name="l01077"></a>01077         {
-<a name="l01078"></a>01078             raw_iterator * iterator_pointer = my_buckets[index];
-<a name="l01079"></a>01079             my_buckets[index] = right.my_buckets[index];
-<a name="l01080"></a>01080             right.my_buckets[index] = iterator_pointer;
-<a name="l01081"></a>01081         }
-<a name="l01082"></a>01082     }
-<a name="l01083"></a>01083 
-<a name="l01084"></a>01084     <span class="comment">// Hash APIs</span>
-<a name="l01085"></a>01085     size_type internal_distance(const_iterator first, const_iterator last)<span class="keyword"> const</span>
-<a name="l01086"></a>01086 <span class="keyword">    </span>{
-<a name="l01087"></a>01087         size_type num = 0;
-<a name="l01088"></a>01088 
-<a name="l01089"></a>01089         <span class="keywordflow">for</span> (const_iterator it = first; it != last; ++it)
-<a name="l01090"></a>01090             ++num;
-<a name="l01091"></a>01091 
-<a name="l01092"></a>01092         <span class="keywordflow">return</span> num;
-<a name="l01093"></a>01093     }
-<a name="l01094"></a>01094 
-<a name="l01095"></a>01095     <span class="comment">// Insert an element in the hash given its value</span>
-<a name="l01096"></a>01096     std::pair<iterator, bool> internal_insert(<span class="keyword">const</span> value_type& value)
-<a name="l01097"></a>01097     {
-<a name="l01098"></a>01098         sokey_t order_key = (sokey_t) my_hash_compare(get_key(value));
-<a name="l01099"></a>01099         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01100"></a>01100 
-<a name="l01101"></a>01101         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01102"></a>01102         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01103"></a>01103             init_bucket(bucket);
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105         size_type new_count;
-<a name="l01106"></a>01106         order_key = split_order_key_regular(order_key);
-<a name="l01107"></a>01107         raw_iterator it = get_bucket(bucket);
-<a name="l01108"></a>01108         raw_iterator last = my_solist.raw_end();
-<a name="l01109"></a>01109         raw_iterator where = it;
-<a name="l01110"></a>01110 
-<a name="l01111"></a>01111         __TBB_ASSERT(where != last, <span class="stringliteral">"Invalid head node"</span>);
-<a name="l01112"></a>01112 
-<a name="l01113"></a>01113         <span class="comment">// First node is a dummy node</span>
-<a name="l01114"></a>01114         ++where;
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116         <span class="keywordflow">for</span> (;;)
-<a name="l01117"></a>01117         {
-<a name="l01118"></a>01118             <span class="keywordflow">if</span> (where == last || solist_t::get_order_key(where) > order_key)
-<a name="l01119"></a>01119             {
-<a name="l01120"></a>01120                 <span class="comment">// Try to insert it in the right place</span>
-<a name="l01121"></a>01121                 std::pair<iterator, bool> result = my_solist.try_insert(it, where, value, order_key, &new_count);
-<a name="l01122"></a>01122                 
-<a name="l01123"></a>01123                 <span class="keywordflow">if</span> (result.second)
-<a name="l01124"></a>01124                 {
-<a name="l01125"></a>01125                     <span class="comment">// Insertion succeeded, adjust the table size, if needed</span>
-<a name="l01126"></a>01126                     adjust_table_size(new_count, my_number_of_buckets);
-<a name="l01127"></a>01127                     <span class="keywordflow">return</span> result;
-<a name="l01128"></a>01128                 }
-<a name="l01129"></a>01129                 <span class="keywordflow">else</span>
-<a name="l01130"></a>01130                 {
-<a name="l01131"></a>01131                     <span class="comment">// Insertion failed: either the same node was inserted by another thread, or</span>
-<a name="l01132"></a>01132                     <span class="comment">// another element was inserted at exactly the same place as this node.</span>
-<a name="l01133"></a>01133                     <span class="comment">// Proceed with the search from the previous location where order key was</span>
-<a name="l01134"></a>01134                     <span class="comment">// known to be larger (note: this is legal only because there is no safe</span>
-<a name="l01135"></a>01135                     <span class="comment">// concurrent erase operation supported).</span>
-<a name="l01136"></a>01136                     where = it;
-<a name="l01137"></a>01137                     ++where;
-<a name="l01138"></a>01138                     <span class="keywordflow">continue</span>;
-<a name="l01139"></a>01139                 }
-<a name="l01140"></a>01140             }
-<a name="l01141"></a>01141             <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="l01142"></a>01142             {
-<a name="l01143"></a>01143                 <span class="comment">// Element already in the list, return it</span>
-<a name="l01144"></a>01144                 <span class="keywordflow">return</span> std::pair<iterator, bool>(my_solist.get_iterator(where), <span class="keyword">false</span>);
-<a name="l01145"></a>01145             }
-<a name="l01146"></a>01146 
-<a name="l01147"></a>01147             <span class="comment">// Move the iterator forward</span>
-<a name="l01148"></a>01148             it = where;
-<a name="l01149"></a>01149             ++where;
-<a name="l01150"></a>01150         }
-<a name="l01151"></a>01151     }
-<a name="l01152"></a>01152 
-<a name="l01153"></a>01153     <span class="comment">// Find the element in the split-ordered list</span>
-<a name="l01154"></a>01154     iterator internal_find(<span class="keyword">const</span> key_type& key)
-<a name="l01155"></a>01155     {
-<a name="l01156"></a>01156         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l01157"></a>01157         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01158"></a>01158 
-<a name="l01159"></a>01159         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01160"></a>01160         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01161"></a>01161             init_bucket(bucket);
-<a name="l01162"></a>01162 
-<a name="l01163"></a>01163         order_key = split_order_key_regular(order_key);
-<a name="l01164"></a>01164         raw_iterator last = my_solist.raw_end();
-<a name="l01165"></a>01165 
-<a name="l01166"></a>01166         <span class="keywordflow">for</span> (raw_iterator it = get_bucket(bucket); it != last; ++it)
-<a name="l01167"></a>01167         {
-<a name="l01168"></a>01168             <span class="keywordflow">if</span> (solist_t::get_order_key(it) > order_key)
-<a name="l01169"></a>01169             {
-<a name="l01170"></a>01170                 <span class="comment">// If the order key is smaller than the current order key, the element</span>
-<a name="l01171"></a>01171                 <span class="comment">// is not in the hash.</span>
-<a name="l01172"></a>01172                 <span class="keywordflow">return</span> end();
-<a name="l01173"></a>01173             }
-<a name="l01174"></a>01174             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (solist_t::get_order_key(it) == order_key)
-<a name="l01175"></a>01175             {
-<a name="l01176"></a>01176                 <span class="comment">// The fact that order keys match does not mean that the element is found.</span>
-<a name="l01177"></a>01177                 <span class="comment">// Key function comparison has to be performed to check whether this is the</span>
-<a name="l01178"></a>01178                 <span class="comment">// right element. If not, keep searching while order key is the same.</span>
-<a name="l01179"></a>01179                 <span class="keywordflow">if</span> (!my_hash_compare(get_key(*it), key))
-<a name="l01180"></a>01180                     <span class="keywordflow">return</span> my_solist.get_iterator(it);
-<a name="l01181"></a>01181             }
-<a name="l01182"></a>01182         }
-<a name="l01183"></a>01183 
-<a name="l01184"></a>01184         <span class="keywordflow">return</span> end();
-<a name="l01185"></a>01185     }
-<a name="l01186"></a>01186 
-<a name="l01187"></a>01187     <span class="comment">// Erase an element from the list. This is not a concurrency safe function.</span>
-<a name="l01188"></a>01188     iterator internal_erase(const_iterator it)
-<a name="l01189"></a>01189     {
-<a name="l01190"></a>01190         key_type key = get_key(*it);
-<a name="l01191"></a>01191         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l01192"></a>01192         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01193"></a>01193 
-<a name="l01194"></a>01194         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01195"></a>01195         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01196"></a>01196             init_bucket(bucket);
-<a name="l01197"></a>01197 
-<a name="l01198"></a>01198         order_key = split_order_key_regular(order_key);
-<a name="l01199"></a>01199 
-<a name="l01200"></a>01200         raw_iterator previous = get_bucket(bucket);
-<a name="l01201"></a>01201         raw_iterator last = my_solist.raw_end();
-<a name="l01202"></a>01202         raw_iterator where = previous;
-<a name="l01203"></a>01203 
-<a name="l01204"></a>01204         __TBB_ASSERT(where != last, <span class="stringliteral">"Invalid head node"</span>);
-<a name="l01205"></a>01205 
-<a name="l01206"></a>01206         <span class="comment">// First node is a dummy node</span>
-<a name="l01207"></a>01207         ++where;
-<a name="l01208"></a>01208 
-<a name="l01209"></a>01209         <span class="keywordflow">for</span> (;;) {
-<a name="l01210"></a>01210             <span class="keywordflow">if</span> (where == last)
-<a name="l01211"></a>01211                 <span class="keywordflow">return</span> end();
-<a name="l01212"></a>01212             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (my_solist.get_iterator(where) == it)
-<a name="l01213"></a>01213                 <span class="keywordflow">return</span> my_solist.erase_node(previous, it);
-<a name="l01214"></a>01214 
-<a name="l01215"></a>01215             <span class="comment">// Move the iterator forward</span>
-<a name="l01216"></a>01216             previous = where;
-<a name="l01217"></a>01217             ++where;
-<a name="l01218"></a>01218         }
-<a name="l01219"></a>01219     }
-<a name="l01220"></a>01220 
-<a name="l01221"></a>01221     <span class="comment">// Return the [begin, end) pair of iterators with the same key values.</span>
-<a name="l01222"></a>01222     <span class="comment">// This operation makes sense only if mapping is many-to-one.</span>
-<a name="l01223"></a>01223     pairii_t internal_equal_range(<span class="keyword">const</span> key_type& key)
-<a name="l01224"></a>01224     {
-<a name="l01225"></a>01225         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l01226"></a>01226         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01227"></a>01227 
-<a name="l01228"></a>01228         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01229"></a>01229         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01230"></a>01230             init_bucket(bucket);
-<a name="l01231"></a>01231 
-<a name="l01232"></a>01232         order_key = split_order_key_regular(order_key);
-<a name="l01233"></a>01233         raw_iterator end_it = my_solist.raw_end();
-<a name="l01234"></a>01234 
-<a name="l01235"></a>01235         <span class="keywordflow">for</span> (raw_iterator it = get_bucket(bucket); it != end_it; ++it)
-<a name="l01236"></a>01236         {
-<a name="l01237"></a>01237             <span class="keywordflow">if</span> (solist_t::get_order_key(it) > order_key)
-<a name="l01238"></a>01238             {
-<a name="l01239"></a>01239                 <span class="comment">// There is no element with the given key</span>
-<a name="l01240"></a>01240                 <span class="keywordflow">return</span> pairii_t(end(), end());
-<a name="l01241"></a>01241             }
-<a name="l01242"></a>01242             <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="l01243"></a>01243             {
-<a name="l01244"></a>01244                 iterator first = my_solist.get_iterator(it);
-<a name="l01245"></a>01245                 iterator last = first;
-<a name="l01246"></a>01246 
-<a name="l01247"></a>01247                 <span class="keywordflow">while</span>( last != end() && !my_hash_compare(get_key(*last), key) )
-<a name="l01248"></a>01248                     ++last;
-<a name="l01249"></a>01249                 <span class="keywordflow">return</span> pairii_t(first, last);
-<a name="l01250"></a>01250             }
-<a name="l01251"></a>01251         }
-<a name="l01252"></a>01252 
-<a name="l01253"></a>01253         <span class="keywordflow">return</span> pairii_t(end(), end());
-<a name="l01254"></a>01254     }
-<a name="l01255"></a>01255 
-<a name="l01256"></a>01256     <span class="comment">// Return the [begin, end) pair of const iterators with the same key values.</span>
-<a name="l01257"></a>01257     <span class="comment">// This operation makes sense only if mapping is many-to-one.</span>
-<a name="l01258"></a>01258     paircc_t internal_equal_range(<span class="keyword">const</span> key_type& key)<span class="keyword"> const</span>
-<a name="l01259"></a>01259 <span class="keyword">    </span>{
-<a name="l01260"></a>01260         sokey_t order_key = (sokey_t) my_hash_compare(key);
-<a name="l01261"></a>01261         size_type bucket = order_key % my_number_of_buckets;
-<a name="l01262"></a>01262 
-<a name="l01263"></a>01263         <span class="comment">// If bucket is empty, initialize it first</span>
-<a name="l01264"></a>01264         <span class="keywordflow">if</span> (!is_initialized(bucket))
-<a name="l01265"></a>01265             <span class="keywordflow">return</span> paircc_t(end(), end());
-<a name="l01266"></a>01266 
-<a name="l01267"></a>01267         order_key = split_order_key_regular(order_key);
-<a name="l01268"></a>01268         raw_const_iterator end_it = my_solist.raw_end();
+<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         <span class="keywordflow">for</span> (raw_const_iterator it = get_bucket(bucket); it != end_it; ++it)
-<a name="l01271"></a>01271         {
-<a name="l01272"></a>01272             <span class="keywordflow">if</span> (solist_t::get_order_key(it) > order_key)
-<a name="l01273"></a>01273             {
-<a name="l01274"></a>01274                 <span class="comment">// There is no element with the given key</span>
-<a name="l01275"></a>01275                 <span class="keywordflow">return</span> paircc_t(end(), end());
-<a name="l01276"></a>01276             }
-<a name="l01277"></a>01277             <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="l01278"></a>01278             {
-<a name="l01279"></a>01279                 const_iterator first = my_solist.get_iterator(it);
-<a name="l01280"></a>01280                 const_iterator last = first;
-<a name="l01281"></a>01281 
-<a name="l01282"></a>01282                 <span class="keywordflow">while</span>( last != end() && !my_hash_compare(get_key(*last), key ) )
-<a name="l01283"></a>01283                     ++last;
-<a name="l01284"></a>01284                 <span class="keywordflow">return</span> paircc_t(first, last);
-<a name="l01285"></a>01285             }
-<a name="l01286"></a>01286         }
-<a name="l01287"></a>01287 
-<a name="l01288"></a>01288         <span class="keywordflow">return</span> paircc_t(end(), end());
-<a name="l01289"></a>01289     }
-<a name="l01290"></a>01290 
-<a name="l01291"></a>01291     <span class="comment">// Bucket APIs</span>
-<a name="l01292"></a>01292     <span class="keywordtype">void</span> init_bucket(size_type bucket)
-<a name="l01293"></a>01293     {
-<a name="l01294"></a>01294         <span class="comment">// Bucket 0 has no parent. Initialize it and return.</span>
-<a name="l01295"></a>01295         <span class="keywordflow">if</span> (bucket == 0) {
-<a name="l01296"></a>01296             internal_init();
-<a name="l01297"></a>01297             <span class="keywordflow">return</span>;
-<a name="l01298"></a>01298         }
-<a name="l01299"></a>01299 
-<a name="l01300"></a>01300         size_type parent_bucket = get_parent(bucket);
-<a name="l01301"></a>01301 
-<a name="l01302"></a>01302         <span class="comment">// All parent_bucket buckets have to be initialized before this bucket is</span>
-<a name="l01303"></a>01303         <span class="keywordflow">if</span> (!is_initialized(parent_bucket))
-<a name="l01304"></a>01304             init_bucket(parent_bucket);
+<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="l01306"></a>01306         raw_iterator parent = get_bucket(parent_bucket);
-<a name="l01307"></a>01307 
-<a name="l01308"></a>01308         <span class="comment">// Create a dummy first node in this bucket</span>
-<a name="l01309"></a>01309         raw_iterator dummy_node = my_solist.insert_dummy(parent, split_order_key_dummy(bucket));
-<a name="l01310"></a>01310         set_bucket(bucket, dummy_node);
-<a name="l01311"></a>01311     }
-<a name="l01312"></a>01312 
-<a name="l01313"></a>01313     <span class="keywordtype">void</span> adjust_table_size(size_type total_elements, size_type current_size)
-<a name="l01314"></a>01314     {
-<a name="l01315"></a>01315         <span class="comment">// Grow the table by a factor of 2 if possible and needed</span>
-<a name="l01316"></a>01316         <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="l01317"></a>01317         {
-<a name="l01318"></a>01318              <span class="comment">// Double the size of the hash only if size has not changed inbetween loads</span>
-<a name="l01319"></a>01319             __TBB_CompareAndSwapW((uintptr_t*)&my_number_of_buckets, 2 * current_size, current_size );
-<a name="l01320"></a>01320         }
-<a name="l01321"></a>01321     }
-<a name="l01322"></a>01322 
-<a name="l01323"></a>01323     size_type get_parent(size_type bucket)<span class="keyword"> const</span>
-<a name="l01324"></a>01324 <span class="keyword">    </span>{
-<a name="l01325"></a>01325         <span class="comment">// Unsets bucket's most significant turned-on bit</span>
-<a name="l01326"></a>01326         size_type msb = __TBB_Log2((uintptr_t)bucket);
-<a name="l01327"></a>01327         <span class="keywordflow">return</span> bucket & ~(size_type(1) << msb);
-<a name="l01328"></a>01328     }
-<a name="l01329"></a>01329 
+<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     <span class="comment">// Dynamic sized array (segments)</span>
-<a name="l01333"></a>01333 <span class="comment"></span>    <span class="keyword">static</span> size_type segment_index_of( size_type index ) {
-<a name="l01334"></a>01334         <span class="keywordflow">return</span> size_type( __TBB_Log2( index|1 ) );
-<a name="l01335"></a>01335     }
-<a name="l01336"></a>01336 
-<a name="l01338"></a>01338     <span class="keyword">static</span> size_type segment_base( size_type k ) {
-<a name="l01339"></a>01339         <span class="keywordflow">return</span> (size_type(1)<<k & ~size_type(1));
-<a name="l01340"></a>01340     }
-<a name="l01341"></a>01341 
-<a name="l01343"></a>01343     <span class="keyword">static</span> size_type segment_size( size_type k ) {
-<a name="l01344"></a>01344         <span class="keywordflow">return</span> k? size_type(1)<<k : 2;
-<a name="l01345"></a>01345     }
+<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     raw_iterator get_bucket(size_type bucket)<span class="keyword"> const </span>{
-<a name="l01348"></a>01348         size_type segment = segment_index_of(bucket);
-<a name="l01349"></a>01349         bucket -= segment_base(segment);
-<a name="l01350"></a>01350         __TBB_ASSERT( my_buckets[segment], <span class="stringliteral">"bucket must be in an allocated segment"</span> );
-<a name="l01351"></a>01351         <span class="keywordflow">return</span> my_buckets[segment][bucket];
-<a name="l01352"></a>01352     }
-<a name="l01353"></a>01353 
-<a name="l01354"></a>01354     <span class="keywordtype">void</span> set_bucket(size_type bucket, raw_iterator dummy_head) {
-<a name="l01355"></a>01355         size_type segment = segment_index_of(bucket);
-<a name="l01356"></a>01356         bucket -= segment_base(segment);
-<a name="l01357"></a>01357 
-<a name="l01358"></a>01358         <span class="keywordflow">if</span> (my_buckets[segment] == NULL) {
-<a name="l01359"></a>01359             size_type sz = segment_size(segment);
-<a name="l01360"></a>01360             raw_iterator * new_segment = my_allocator.allocate(sz);
-<a name="l01361"></a>01361             std::memset(new_segment, 0, sz*<span class="keyword">sizeof</span>(raw_iterator));
-<a name="l01362"></a>01362 
-<a name="l01363"></a>01363             <span class="keywordflow">if</span> (__TBB_CompareAndSwapW((<span class="keywordtype">void</span> *) &my_buckets[segment], (uintptr_t)new_segment, 0) != 0)
-<a name="l01364"></a>01364                 my_allocator.deallocate(new_segment, sz);
-<a name="l01365"></a>01365         }
-<a name="l01366"></a>01366 
-<a name="l01367"></a>01367         my_buckets[segment][bucket] = dummy_head;
-<a name="l01368"></a>01368     }
-<a name="l01369"></a>01369 
-<a name="l01370"></a>01370     <span class="keywordtype">bool</span> is_initialized(size_type bucket)<span class="keyword"> const </span>{
-<a name="l01371"></a>01371         size_type segment = segment_index_of(bucket);
-<a name="l01372"></a>01372         bucket -= segment_base(segment);
-<a name="l01373"></a>01373 
-<a name="l01374"></a>01374         <span class="keywordflow">if</span> (my_buckets[segment] == NULL)
-<a name="l01375"></a>01375             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01376"></a>01376 
-<a name="l01377"></a>01377         raw_iterator it = my_buckets[segment][bucket];
-<a name="l01378"></a>01378         <span class="keywordflow">return</span> (it.get_node_ptr() != NULL);
-<a name="l01379"></a>01379     }
-<a name="l01380"></a>01380 
-<a name="l01381"></a>01381     <span class="comment">// Utilities for keys</span>
-<a name="l01382"></a>01382 
-<a name="l01383"></a>01383     <span class="comment">// A regular order key has its original hash value reversed and the last bit set</span>
-<a name="l01384"></a>01384     sokey_t split_order_key_regular(sokey_t order_key)<span class="keyword"> const </span>{
-<a name="l01385"></a>01385         <span class="keywordflow">return</span> __TBB_ReverseBits(order_key) | 0x1;
-<a name="l01386"></a>01386     }
-<a name="l01387"></a>01387 
-<a name="l01388"></a>01388     <span class="comment">// A dummy order key has its original hash value reversed and the last bit unset</span>
-<a name="l01389"></a>01389     sokey_t split_order_key_dummy(sokey_t order_key)<span class="keyword"> const </span>{
-<a name="l01390"></a>01390         <span class="keywordflow">return</span> __TBB_ReverseBits(order_key) & ~(0x1);
-<a name="l01391"></a>01391     }
-<a name="l01392"></a>01392 
-<a name="l01393"></a>01393     <span class="comment">// Shared variables</span>
-<a name="l01394"></a>01394     size_type                                                     my_number_of_buckets;       <span class="comment">// Current table size</span>
-<a name="l01395"></a>01395     solist_t                                                      my_solist;                  <span class="comment">// List where all the elements are kept</span>
-<a name="l01396"></a>01396     <span class="keyword">typename</span> allocator_type::template rebind<raw_iterator>::other my_allocator;               <span class="comment">// Allocator object for segments</span>
-<a name="l01397"></a>01397     <span class="keywordtype">float</span>                                                         my_maximum_bucket_size;     <span class="comment">// Maximum size of the bucket</span>
-<a name="l01398"></a>01398     raw_iterator                                                 *my_buckets[pointers_per_table]; <span class="comment">// The segment table</span>
-<a name="l01399"></a>01399 };
-<a name="l01400"></a>01400 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l01401"></a>01401 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(pop) // warning 4127 -- while (true) has a constant expression in it</span>
-<a name="l01402"></a>01402 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l01403"></a>01403 <span class="preprocessor"></span>
-<a name="l01405"></a>01405 <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="l01406"></a>01406 } <span class="comment">// namespace internal</span>
-<a name="l01409"></a>01409 <span class="comment"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l01410"></a>01410 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> T& t ) {
-<a name="l01411"></a>01411     <span class="keywordflow">return</span> static_cast<size_t>( t ) * internal::hash_multiplier;
-<a name="l01412"></a>01412 }
-<a name="l01413"></a>01413 <span class="keyword">template</span><<span class="keyword">typename</span> P>
-<a name="l01414"></a>01414 <span class="keyword">inline</span> size_t tbb_hasher( P* ptr ) {
-<a name="l01415"></a>01415     size_t <span class="keyword">const</span> h = reinterpret_cast<size_t>( ptr );
-<a name="l01416"></a>01416     <span class="keywordflow">return</span> (h >> 3) ^ h;
-<a name="l01417"></a>01417 }
-<a name="l01418"></a>01418 <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="l01419"></a>01419 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> std::basic_string<E,S,A>& s ) {
-<a name="l01420"></a>01420     size_t h = 0;
-<a name="l01421"></a>01421     <span class="keywordflow">for</span>( <span class="keyword">const</span> E* c = s.c_str(); *c; ++c )
-<a name="l01422"></a>01422         h = static_cast<size_t>(*c) ^ (h * internal::hash_multiplier);
-<a name="l01423"></a>01423     <span class="keywordflow">return</span> h;
-<a name="l01424"></a>01424 }
-<a name="l01425"></a>01425 <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> S>
-<a name="l01426"></a>01426 <span class="keyword">inline</span> size_t tbb_hasher( <span class="keyword">const</span> std::pair<F,S>& p ) {
-<a name="l01427"></a>01427     <span class="keywordflow">return</span> tbb_hasher(p.first) ^ tbb_hasher(p.second);
-<a name="l01428"></a>01428 }
-<a name="l01429"></a>01429 } <span class="comment">// namespace interface5</span>
-<a name="l01430"></a>01430 <span class="keyword">using</span> interface5::tbb_hasher;
-<a name="l01431"></a>01431 } <span class="comment">// namespace tbb</span>
-<a name="l01432"></a>01432 <span class="preprocessor">#endif// __TBB_concurrent_unordered_internal_H</span>
+<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>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00308.html b/doc/html/a00309.html
similarity index 100%
rename from doc/html/a00308.html
rename to doc/html/a00309.html
diff --git a/doc/html/a00310.html b/doc/html/a00310.html
deleted file mode 100644
index 183d4ef..0000000
--- a/doc/html/a00310.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="a00142.html">00033</a> <span class="keyword">class </span><a class="code" href="a00142.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="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">00039</a>     T* <a class="code" href="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>() {<span class="keywordflow">return</span> reinterpret_cast<T*>(<span class="keyword">this</span>);}
-<a name="l00040"></a>00040 
-<a name="l00042"></a><a class="code" href="a00142.html#024be075c23c0394c9a2518d993bcd9e">00042</a>     T* <a class="code" href="a00142.html#024be075c23c0394c9a2518d993bcd9e">end</a>() {<span class="keywordflow">return</span> <a class="code" href="a00142.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/a00311.html b/doc/html/a00311.html
index 85cf83c..74e2a7a 100644
--- a/doc/html/a00311.html
+++ b/doc/html/a00311.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>atomic.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,7 +19,7 @@
     <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>
+<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>
@@ -39,357 +39,29 @@
 <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="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 <cstddef></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_stddef.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_machine.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="a00143.html">00306</a> <span class="keyword">struct </span><a class="code" href="a00143.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="a00143.html">atomic<T></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00143.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="a00143.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="a00143.html">atomic<T*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00143.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="a00144.html">00373</a> <span class="keyword">template</span><> <span class="keyword">struct </span><a class="code" href="a00143.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="a00143.html">atomic<void*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00143.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>
+<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.
diff --git a/doc/html/a00311.html b/doc/html/a00312.html
similarity index 98%
copy from doc/html/a00311.html
copy to doc/html/a00312.html
index 85cf83c..a923726 100644
--- a/doc/html/a00311.html
+++ b/doc/html/a00312.html
@@ -308,12 +308,12 @@
 <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="a00143.html">00306</a> <span class="keyword">struct </span><a class="code" href="a00143.html">atomic</a>: internal::atomic_impl<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="a00143.html">atomic<T></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00143.html">atomic<T></a>& rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+<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>
@@ -360,12 +360,12 @@
 <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="a00143.html">atomic</a><T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {
+<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="a00143.html">atomic<T*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00143.html">atomic<T*></a>& rhs ) {
+<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>{
@@ -373,12 +373,12 @@
 <a name="l00369"></a>00369     }
 <a name="l00370"></a>00370 };
 <a name="l00371"></a>00371 
-<a name="l00373"></a><a class="code" href="a00144.html">00373</a> <span class="keyword">template</span><> <span class="keyword">struct </span><a class="code" href="a00143.html">atomic</a><void*>: internal::atomic_impl<void*> {
+<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="a00143.html">atomic<void*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00143.html">atomic<void*></a>& rhs ) {
+<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 };
diff --git a/doc/html/a00319.html b/doc/html/a00319.html
deleted file mode 100644
index c268905..0000000
--- a/doc/html/a00319.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="a00148.html">00040</a> <span class="keyword">class </span><a class="code" href="a00148.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="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
-<a name="l00046"></a>00046 
-<a name="l00048"></a><a class="code" href="a00148.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
-<a name="l00049"></a>00049 
-<a name="l00051"></a>00051 
-<a name="l00052"></a><a class="code" href="a00148.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00148.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_end(), my_begin() {}
-<a name="l00053"></a>00053 
-<a name="l00055"></a><a class="code" href="a00148.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00148.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00148.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="a00148.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00148.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="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00148.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="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
-<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<<a class="code" href="a00148.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="a00148.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="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00148.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00148.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="a00148.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00148.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="a00148.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00148.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<<a class="code" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
-<a name="l00087"></a>00087 
-<a name="l00089"></a>00089 
-<a name="l00091"></a><a class="code" href="a00148.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00148.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00148.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="a00148.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="a00148.html">blocked_range</a>& r ) {
-<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00148.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="a00148.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00148.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00148.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
-<a name="l00108"></a>00108         r.<a class="code" href="a00148.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/a00320.html b/doc/html/a00320.html
index e98c6f3..75d0fb5 100644
--- a/doc/html/a00320.html
+++ b/doc/html/a00320.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>blocked_range2d.h Source File</title>
+<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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,69 +39,83 @@
 <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="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 <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="a00149.html">00032</a> <span class="keyword">class </span><a class="code" href="a00149.html">blocked_range2d</a> {
-<a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00149.html#a807a22fe658ec38b8edfd69521d0383">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00148.html">blocked_range<RowValue></a> <a class="code" href="a00148.html">row_range_type</a>;
-<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00148.html">blocked_range<ColValue></a> <a class="code" href="a00148.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="a00148.html">row_range_type</a> my_rows;
-<a name="l00040"></a>00040     <a class="code" href="a00148.html">col_range_type</a> my_cols;
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="keyword">public</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="l00044"></a>00044     <a class="code" href="a00149.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> <a class="code" href="a00148.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="a00148.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="a00149.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="a00149.html#d144cb2d88cef553420311aca8667a44">00059</a>     <span class="keywordtype">bool</span> <a class="code" href="a00149.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="a00148.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00148.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
-<a name="l00062"></a>00062     }
+<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="a00149.html#ad36a9b38e4fef26d376f99552ce2d92">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00149.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="a00148.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00148.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
-<a name="l00067"></a>00067     }
+<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>00069     <a class="code" href="a00149.html">blocked_range2d</a>( <a class="code" href="a00149.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="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00074"></a>00074             my_cols.<a class="code" href="a00148.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00149.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="a00148.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00149.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="a00149.html#f496e7348a82652fba581203477cc07c">00081</a>     <span class="keyword">const</span> <a class="code" href="a00148.html">row_range_type</a>& <a class="code" href="a00149.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="a00149.html#392a46759af2c884957115771affa7f4">00084</a>     <span class="keyword">const</span> <a class="code" href="a00148.html">col_range_type</a>& <a class="code" href="a00149.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>
+<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.
diff --git a/doc/html/a00321.html b/doc/html/a00321.html
index a3e9607..d630f20 100644
--- a/doc/html/a00321.html
+++ b/doc/html/a00321.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>blocked_range3d.h Source File</title>
+<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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,8 +39,8 @@
 <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="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>
@@ -48,78 +48,60 @@
 <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="a00150.html">00032</a> <span class="keyword">class </span><a class="code" href="a00150.html">blocked_range3d</a> {
+<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="a00150.html#b8ebf17a552ba47825e9b3887855b719">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00148.html">blocked_range<PageValue></a> <a class="code" href="a00148.html">page_range_type</a>;
-<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00148.html">blocked_range<RowValue></a>  <a class="code" href="a00148.html">row_range_type</a>;
-<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="a00148.html">blocked_range<ColValue></a>  <a class="code" href="a00148.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="a00148.html">page_range_type</a> my_pages;
-<a name="l00041"></a>00041     <a class="code" href="a00148.html">row_range_type</a>  my_rows;
-<a name="l00042"></a>00042     <a class="code" href="a00148.html">col_range_type</a>  my_cols;
+<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 <span class="keyword">public</span>:
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046     <a class="code" href="a00150.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="a00150.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> <a class="code" href="a00148.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="a00148.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="a00148.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="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="a00150.html#356860e1c977d91711e8216bd55c0b25">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00150.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="a00148.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_rows.<a class="code" href="a00148.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00148.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
-<a name="l00068"></a>00068     }
-<a name="l00069"></a>00069 
-<a name="l00071"></a><a class="code" href="a00150.html#39d69191721c488e737ae5d9c5336b9c">00071</a>     <span class="keywordtype">bool</span> <a class="code" href="a00150.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="a00148.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_rows.<a class="code" href="a00148.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00148.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
-<a name="l00073"></a>00073     }
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075     <a class="code" href="a00150.html">blocked_range3d</a>( <a class="code" href="a00150.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="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_rows.<a class="code" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00081"></a>00081             <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00082"></a>00082                 my_cols.<a class="code" href="a00148.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00150.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="a00148.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00150.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="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00088"></a>00088                 my_cols.<a class="code" href="a00148.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00150.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="a00148.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00150.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="a00150.html#cf971430aa12361d3ed245344b7c6764">00096</a>     <span class="keyword">const</span> <a class="code" href="a00148.html">page_range_type</a>& <a class="code" href="a00150.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="a00150.html#1584623e59ff32a8aa82006827508be4">00099</a>     <span class="keyword">const</span> <a class="code" href="a00148.html">row_range_type</a>& <a class="code" href="a00150.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="a00150.html#3336ba9480fd6c43e158f9beb024c050">00102</a>     <span class="keyword">const</span> <a class="code" href="a00148.html">col_range_type</a>& <a class="code" href="a00150.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>
+<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.
diff --git a/doc/html/a00322.html b/doc/html/a00322.html
index a2e2d81..54be49a 100644
--- a/doc/html/a00322.html
+++ b/doc/html/a00322.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>cache_aligned_allocator.h Source File</title>
+<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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,96 +39,87 @@
 <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="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 <new></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_stddef.h"</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 <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="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 <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="a00151.html">00057</a> <span class="keyword">class </span><a class="code" href="a00151.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="a00151.html">cache_aligned_allocator<U></a> other;
-<a name="l00068"></a>00068     };
+<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="l00070"></a>00070     <a class="code" href="a00151.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00071"></a>00071     <a class="code" href="a00151.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00151.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="a00151.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00151.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="a00151.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00078</a>     pointer <a class="code" href="a00151.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="a00151.html#3d4eadf188f7d85d3805ae534e0b8e1c">00084</a>     <span class="keywordtype">void</span> <a class="code" href="a00151.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="a00151.html#fb23b687b4c0429dab4c7f8017266cf0">00089</a>     size_type <a class="code" href="a00151.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="a00151.html#958ee8745c86c275bfc9533af565e017">00094</a>     <span class="keywordtype">void</span> <a class="code" href="a00151.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="a00151.html#cd298895a4f1654b5149ec84b591ecb5">00097</a>     <span class="keywordtype">void</span> <a class="code" href="a00151.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="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="keyword">template</span><> 
-<a name="l00107"></a><a class="code" href="a00152.html">00107</a> <span class="keyword">class </span><a class="code" href="a00151.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="a00151.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="a00151.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00151.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>
+<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.
diff --git a/doc/html/a00322.html b/doc/html/a00323.html
similarity index 89%
copy from doc/html/a00322.html
copy to doc/html/a00323.html
index a2e2d81..b67a71d 100644
--- a/doc/html/a00322.html
+++ b/doc/html/a00323.html
@@ -66,7 +66,7 @@
 <a name="l00051"></a>00051 <span class="preprocessor"></span>
 <a name="l00053"></a>00053 
 <a name="l00056"></a>00056 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00057"></a><a class="code" href="a00151.html">00057</a> <span class="keyword">class </span><a class="code" href="a00151.html">cache_aligned_allocator</a> {
+<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;
@@ -76,32 +76,32 @@
 <a name="l00064"></a>00064     <span class="keyword">typedef</span> size_t size_type;
 <a name="l00065"></a>00065     <span class="keyword">typedef</span> ptrdiff_t difference_type;
 <a name="l00066"></a>00066     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00067"></a>00067         <span class="keyword">typedef</span> <a class="code" href="a00151.html">cache_aligned_allocator<U></a> other;
+<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="a00151.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00071"></a>00071     <a class="code" href="a00151.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00151.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="a00151.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00151.html">cache_aligned_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
+<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="a00151.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00078</a>     pointer <a class="code" href="a00151.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* hint=0 ) {
+<a name="l00078"></a><a class="code" href="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="a00151.html#3d4eadf188f7d85d3805ae534e0b8e1c">00084</a>     <span class="keywordtype">void</span> <a class="code" href="a00151.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( pointer p, size_type ) {
+<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="a00151.html#fb23b687b4c0429dab4c7f8017266cf0">00089</a>     size_type <a class="code" href="a00151.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const throw() {
+<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="a00151.html#958ee8745c86c275bfc9533af565e017">00094</a>     <span class="keywordtype">void</span> <a class="code" href="a00151.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="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="a00151.html#cd298895a4f1654b5149ec84b591ecb5">00097</a>     <span class="keywordtype">void</span> <a class="code" href="a00151.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>( pointer p ) {p->~value_type();}
+<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>
@@ -110,18 +110,18 @@
 <a name="l00103"></a>00103 <span class="preprocessor"></span>
 <a name="l00105"></a>00105 
 <a name="l00106"></a>00106 <span class="keyword">template</span><> 
-<a name="l00107"></a><a class="code" href="a00152.html">00107</a> <span class="keyword">class </span><a class="code" href="a00151.html">cache_aligned_allocator</a><void> {
+<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="a00151.html">cache_aligned_allocator<U></a> other;
+<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="a00151.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00151.html">cache_aligned_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00118"></a>00118 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="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>;}
diff --git a/doc/html/a00324.html b/doc/html/a00324.html
deleted file mode 100644
index 55ca02b..0000000
--- a/doc/html/a00324.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="a00154.html">00034</a>         <span class="keyword">class </span><a class="code" href="a00154.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="a00151.html">tbb::cache_aligned_allocator<T></a> <a class="code" href="a00151.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="a00154.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="a00154.html">combinable</a>( finit _finit) : my_ets(_finit) { }
-<a name="l00047"></a>00047 
-<a name="l00049"></a><a class="code" href="a00154.html#2c87e79ae98588a5780f708773388843">00049</a>         <a class="code" href="a00154.html#2c87e79ae98588a5780f708773388843">~combinable</a>() { 
-<a name="l00050"></a>00050         }
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052         <a class="code" href="a00154.html">combinable</a>(<span class="keyword">const</span> <a class="code" href="a00154.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/a00325.html b/doc/html/a00325.html
index 54a4fed..2020e5f 100644
--- a/doc/html/a00325.html
+++ b/doc/html/a00325.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>concurrent_hash_map.h Source File</title>
+<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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,1209 +39,54 @@
 <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="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 "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="a00156.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         Value* operator++(<span class="keywordtype">int</span>) {
-<a name="l00406"></a>00406             Value* result = &operator*();
-<a name="l00407"></a>00407             operator++();
-<a name="l00408"></a>00408             <span class="keywordflow">return</span> result;
-<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="a00156.html">00567</a> <span class="keyword">class </span><a class="code" href="a00156.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="a00159.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="a00158.html">00626</a>     <span class="keyword">class </span><a class="code" href="a00158.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="a00158.html">bucket_accessor</a>( <a class="code" href="a00156.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="a00158.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="a00156.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="a00156.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="a00158.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="a00158.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="a00159.html">00690</a>     <span class="keyword">class </span><a class="code" href="a00159.html">const_accessor</a> {
-<a name="l00691"></a>00691         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00156.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="a00157.html">accessor</a>;
-<a name="l00693"></a>00693         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00157.html">accessor</a> & ) <span class="keyword">const</span>; <span class="comment">// Deny access</span>
-<a name="l00694"></a>00694         <a class="code" href="a00159.html">const_accessor</a>( <span class="keyword">const</span> <a class="code" href="a00157.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.html#a9ead65cca68d4c49c7ef64d7899a4c8">00722</a>         <a class="code" href="a00159.html">const_accessor</a>() : my_node(NULL) {}
-<a name="l00723"></a>00723 
-<a name="l00725"></a><a class="code" href="a00159.html#752b0c1ec74b94786403a75e42917d01">00725</a>         ~<a class="code" href="a00159.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="a00157.html">00735</a>     <span class="keyword">class </span><a class="code" href="a00157.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00159.html">const_accessor</a> {
-<a name="l00736"></a>00736     <span class="keyword">public</span>:
-<a name="l00738"></a><a class="code" href="a00157.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="a00157.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="a00157.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="a00156.html#d827bb5e4f61de1916ab67d51c7c6e60">00753</a>     <a class="code" href="a00156.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="a00156.html#a4612d5c7233712d455496641e9b31ff">00758</a>     <a class="code" href="a00156.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="a00156.html#df0cd14eaddb17f10929c91519e65be9">00765</a>     <a class="code" href="a00156.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00156.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="a00156.html#3bfe75fcb350ce39cf610c164f233edc">00773</a>     <a class="code" href="a00156.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="a00156.html#2c0c42a2e1b5282b6739157df9ce2304">00781</a>     <a class="code" href="a00156.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00156.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="a00156.html#a1ac58997d8fbf242b266e3691573481">00799</a>     ~<a class="code" href="a00156.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="a00156.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="a00156.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="a00156.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="a00156.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="a00156.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="a00156.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="a00156.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="a00156.html#64338d7f2e35df586af4cb0145cd910f">00850</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00159.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="a00159.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="a00156.html#bce7bdf46435115a95cca2aa73c5da83">00857</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00157.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00858"></a>00858         result.<a class="code" href="a00159.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="a00156.html#58c38b27273de6c670568633c0931854">00864</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00159.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00865"></a>00865         result.<a class="code" href="a00159.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="a00156.html#ccfecaa3e71d92be61fb3d811dd264eb">00871</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00157.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00872"></a>00872         result.<a class="code" href="a00159.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="a00156.html#d4a2816129e38c53128c6d0c7b6b7370">00878</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00159.html">const_accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00879"></a>00879         result.<a class="code" href="a00159.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="a00156.html#a657e61cd2b13164764ca2708875784a">00885</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00157.html">accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00886"></a>00886         result.<a class="code" href="a00159.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="a00156.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="a00156.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="a00156.html#da7e4a50f6bb06191817425ec85fe760">00909</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00159.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="a00156.html#0f500842d0cf791f8fa61662edb1b311">00915</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00157.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="a00156.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="a00156.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="a00156.html#1f22480a290ddc6c145888d8f985531a">00981</a> <span class="keywordtype">bool</span> <a class="code" href="a00156.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="a00159.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
-<a name="l00982"></a>00982     __TBB_ASSERT( !result || !result-><a class="code" href="a00159.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="a00158.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="a00158.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</a>() && !b.<a class="code" href="a00158.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="a00159.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="a00145.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="a00159.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="a00159.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a> = n;
-<a name="l01057"></a>01057     result-><a class="code" href="a00159.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="a00156.html#976c57edfb7f22b9f91a2e11f141eb4a">01069</a> std::pair<I, I> <a class="code" href="a00156.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="a00156.html#faad2108bd2be75e52293486af59f11e">01087</a> <span class="keywordtype">bool</span> <a class="code" href="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( <a class="code" href="a00159.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="a00159.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="a00159.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a>;
-<a name="l01090"></a>01090     item_accessor.<a class="code" href="a00159.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="a00159.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="a00158.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="a00159.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="a00159.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="a00159.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="a00156.html#034c3b3ee419edee78e0f2f2b1f0d7ca">01122</a> <span class="keywordtype">bool</span> <a class="code" href="a00156.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="a00158.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="a00158.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</a>() && !b.<a class="code" href="a00158.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="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00156.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="a00156.html#252e91d8029f6308db7179557e3b1436">my_allocator</a>);
-<a name="l01165"></a>01165     std::swap(this->my_hash_compare, table.<a class="code" href="a00156.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="a00156.html#13f3f2e8de7564be03882c31559493c9">01170</a> <span class="keywordtype">void</span> <a class="code" href="a00156.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="a00156.html#a9f89be8fe28835749529d91081a2511">01236</a> <span class="keywordtype">void</span> <a class="code" href="a00156.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="a00151.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="a00151.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="a00151.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="a00156.html#3c27779fe66b79505390d084310d997e">01299</a> <span class="keywordtype">void</span> <a class="code" href="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00156.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="a00156.html#13f3f2e8de7564be03882c31559493c9">rehash</a>();
-<a name="l01319"></a>01319     } <span class="keywordflow">else</span> <a class="code" href="a00156.html#3c27779fe66b79505390d084310d997e">internal_copy</a>( source.<a class="code" href="a00156.html#4a3c58cf1234b74ca796dcf555d32f53">begin</a>(), source.<a class="code" href="a00156.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="a00156.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>
+<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.
diff --git a/doc/html/a00325.html b/doc/html/a00326.html
similarity index 93%
copy from doc/html/a00325.html
copy to doc/html/a00326.html
index 54a4fed..81d2db8 100644
--- a/doc/html/a00325.html
+++ b/doc/html/a00326.html
@@ -86,7 +86,7 @@
 <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="a00156.html">concurrent_hash_map</a>;
+<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 
@@ -368,10 +368,10 @@
 <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         Value* operator++(<span class="keywordtype">int</span>) {
-<a name="l00406"></a>00406             Value* result = &operator*();
+<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> result;
+<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 
@@ -490,7 +490,7 @@
 <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="a00156.html">00567</a> <span class="keyword">class </span><a class="code" href="a00156.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
+<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 
@@ -514,7 +514,7 @@
 <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="a00159.html">const_accessor</a>;
+<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;
@@ -548,12 +548,12 @@
 <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="a00158.html">00626</a>     <span class="keyword">class </span><a class="code" href="a00158.html">bucket_accessor</a> : <span class="keyword">public</span> bucket::scoped_t {
+<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="a00158.html">bucket_accessor</a>( <a class="code" href="a00156.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="a00158.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="a00156.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="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>
@@ -563,14 +563,14 @@
 <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="a00156.html#571d635fd206d9985cf20a1a659ea476">rehash_bucket</a>( my_b, h ); <span class="comment">//recursive rehashing</span>
+<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="a00158.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="a00158.html#57c6110bd20e95c06de5a199de988941">00651</a>         bucket *operator() () { <span class="keywordflow">return</span> my_b; }
+<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     };
@@ -608,35 +608,35 @@
 <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="a00159.html">00690</a>     <span class="keyword">class </span><a class="code" href="a00159.html">const_accessor</a> {
-<a name="l00691"></a>00691         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00156.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="a00157.html">accessor</a>;
-<a name="l00693"></a>00693         <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00157.html">accessor</a> & ) <span class="keyword">const</span>; <span class="comment">// Deny access</span>
-<a name="l00694"></a>00694         <a class="code" href="a00159.html">const_accessor</a>( <span class="keyword">const</span> <a class="code" href="a00157.html">accessor</a> & );       <span class="comment">// Deny access</span>
+<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="a00159.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="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="a00159.html#5cce3104cb0a52e08d2131370871c614">00700</a>         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
+<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="a00159.html#d5ce4f88d8870290238a8ad621e6f270">00703</a>         <span class="keywordtype">void</span> <a class="code" href="a00267.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
+<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="a00159.html#30f31106840700a4c3664b9cb1c31ca7">00711</a>         const_reference operator*()<span class="keyword"> const </span>{
+<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="a00159.html#3d03a48ecb8cd9549bd8be64b09c9b0d">00717</a>         const_pointer operator->()<span class="keyword"> const </span>{
+<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="a00159.html#a9ead65cca68d4c49c7ef64d7899a4c8">00722</a>         <a class="code" href="a00159.html">const_accessor</a>() : my_node(NULL) {}
+<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="a00159.html#752b0c1ec74b94786403a75e42917d01">00725</a>         ~<a class="code" href="a00159.html">const_accessor</a>() {
+<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>:
@@ -645,45 +645,45 @@
 <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="a00157.html">00735</a>     <span class="keyword">class </span><a class="code" href="a00157.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00159.html">const_accessor</a> {
+<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="a00157.html#49eec74f272bab187d176c0d9d16a7fe">00738</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
+<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="a00157.html#e8938f0cd1211e88a1d73527ed3636c4">00741</a>         reference operator*()<span class="keyword"> const </span>{
+<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="a00157.html#fcebc32c020202cc37e60eadef157569">00747</a>         pointer operator->()<span class="keyword"> const </span>{
+<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="a00156.html#d827bb5e4f61de1916ab67d51c7c6e60">00753</a>     <a class="code" href="a00156.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+<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="a00156.html#a4612d5c7233712d455496641e9b31ff">00758</a>     <a class="code" href="a00156.html">concurrent_hash_map</a>(size_type n, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<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="a00156.html#df0cd14eaddb17f10929c91519e65be9">00765</a>     <a class="code" href="a00156.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00156.html">concurrent_hash_map</a>& table, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<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="a00156.html#3bfe75fcb350ce39cf610c164f233edc">00773</a>     <a class="code" href="a00156.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<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="a00156.html#2c0c42a2e1b5282b6739157df9ce2304">00781</a>     <a class="code" href="a00156.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00156.html">concurrent_hash_map</a>& table ) {
+<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);
@@ -697,7 +697,7 @@
 <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="a00156.html#a1ac58997d8fbf242b266e3691573481">00799</a>     ~<a class="code" href="a00156.html">concurrent_hash_map</a>() { clear(); }
+<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>
@@ -719,69 +719,69 @@
 <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="a00156.html#17fd8c5fe8c6a86075f34aa4e8412ba3">00822</a>     size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
+<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="a00156.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="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="a00156.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="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="a00156.html#414d15033d36c63aa3a40666dc4d6f5e">00831</a>     size_type bucket_count()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_mask+1; }
+<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="a00156.html#199208eed6f09e200cda364f906be0fe">00834</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<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="a00156.html">concurrent_hash_map</a> &table);
+<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="a00156.html#74f5ef06a06c5e619f156a1c76c04969">00844</a>     size_type count( <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
+<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="a00156.html#64338d7f2e35df586af4cb0145cd910f">00850</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00159.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="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
+<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="a00156.html#bce7bdf46435115a95cca2aa73c5da83">00857</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00157.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00858"></a>00858         result.<a class="code" href="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
+<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="a00156.html#58c38b27273de6c670568633c0931854">00864</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00159.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00865"></a>00865         result.<a class="code" href="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
+<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="a00156.html#ccfecaa3e71d92be61fb3d811dd264eb">00871</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00157.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00872"></a>00872         result.<a class="code" href="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
+<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="a00156.html#d4a2816129e38c53128c6d0c7b6b7370">00878</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00159.html">const_accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00879"></a>00879         result.<a class="code" href="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
+<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="a00156.html#a657e61cd2b13164764ca2708875784a">00885</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00157.html">accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00886"></a>00886         result.<a class="code" href="a00159.html#d5ce4f88d8870290238a8ad621e6f270">release</a>();
+<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="a00156.html#52bffd1066b3d7b793945bc6fa1a71a1">00892</a>     <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type &value ) {
+<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="a00156.html#cfe172677e5987004ef4a03e22fa338a">00898</a>     <span class="keywordtype">void</span> insert(I first, I last) {
+<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     }
@@ -790,12 +790,12 @@
 <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="a00156.html#da7e4a50f6bb06191817425ec85fe760">00909</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00159.html">const_accessor</a>& item_accessor ) {
+<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="a00156.html#0f500842d0cf791f8fa61662edb1b311">00915</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00157.html">accessor</a>& item_accessor ) {
+<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 
@@ -807,13 +807,13 @@
 <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="a00156.html">concurrent_hash_map</a>& source );
+<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="a00156.html#2f76ed101a0ccc8875b846c2f747897e">00939</a>     const_pointer internal_fast_find( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
+<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 );
@@ -855,8 +855,8 @@
 <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="a00156.html#1f22480a290ddc6c145888d8f985531a">00981</a> <span class="keywordtype">bool</span> <a class="code" href="a00156.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="a00159.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
-<a name="l00982"></a>00982     __TBB_ASSERT( !result || !result-><a class="code" href="a00159.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a>, NULL );
+<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;
@@ -871,7 +871,7 @@
 <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="a00158.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
+<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() );
@@ -882,7 +882,7 @@
 <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="a00158.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</a>() && !b.<a class="code" href="a00158.html#8f7f0dc61f528de29d06e6054b4a9835">upgrade_to_writer</a>() ) { <span class="comment">// TODO: improved insertion</span>
+<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>
@@ -911,9 +911,9 @@
 <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="a00159.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.try_acquire( n->mutex, write ) ) {
+<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="a00145.html">tbb::internal::atomic_backoff</a> trials;
+<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>
@@ -927,11 +927,11 @@
 <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="a00159.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.try_acquire( n->mutex, write ) );
+<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="a00159.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a> = n;
-<a name="l01057"></a>01057     result-><a class="code" href="a00159.html#88e677d4e26a67d65d81af524ddd483a">my_hash</a> = h;
+<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 )
@@ -943,7 +943,7 @@
 <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="a00156.html#976c57edfb7f22b9f91a2e11f141eb4a">01069</a> std::pair<I, I> <a class="code" href="a00156.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="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);
@@ -961,11 +961,11 @@
 <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="a00156.html#faad2108bd2be75e52293486af59f11e">01087</a> <span class="keywordtype">bool</span> <a class="code" href="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( <a class="code" href="a00159.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="a00159.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="a00159.html#74e5fd476c306e90361f3377f0fec6d8">my_node</a>;
-<a name="l01090"></a>01090     item_accessor.<a class="code" href="a00159.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="a00159.html#88e677d4e26a67d65d81af524ddd483a">my_hash</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>
@@ -973,14 +973,14 @@
 <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="a00158.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m, <span class="comment">/*writer=*/</span><span class="keyword">true</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="a00159.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.release();
+<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 );
@@ -989,14 +989,14 @@
 <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="a00159.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="a00159.html#b57d7e72014cd2ae5a915606410615ce">my_lock</a>.release();
+<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="a00156.html#034c3b3ee419edee78e0f2f2b1f0d7ca">01122</a> <span class="keywordtype">bool</span> <a class="code" href="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::erase</a>( <span class="keyword">const</span> Key &key ) {
+<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>
@@ -1007,7 +1007,7 @@
 <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="a00158.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
+<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;
@@ -1020,7 +1020,7 @@
 <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="a00158.html#fc194e3a186dc935a5fb513cc9f8e898">is_writer</a>() && !b.<a class="code" href="a00158.html#8f7f0dc61f528de29d06e6054b4a9835">upgrade_to_writer</a>() ) {
+<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;
@@ -1037,14 +1037,14 @@
 <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="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00156.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="a00156.html#252e91d8029f6308db7179557e3b1436">my_allocator</a>);
-<a name="l01165"></a>01165     std::swap(this->my_hash_compare, table.<a class="code" href="a00156.html#f738f241c8500ce3dbf0f9028ca8b602">my_hash_compare</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="a00156.html#13f3f2e8de7564be03882c31559493c9">01170</a> <span class="keywordtype">void</span> <a class="code" href="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::rehash</a>(size_type sz) {
+<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>
@@ -1110,7 +1110,7 @@
 <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="a00156.html#a9f89be8fe28835749529d91081a2511">01236</a> <span class="keywordtype">void</span> <a class="code" href="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::clear</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>
@@ -1153,7 +1153,7 @@
 <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="a00151.html">cache_aligned_allocator<bucket></a> alloc;
+<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];
@@ -1164,16 +1164,16 @@
 <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="a00151.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, sz );
+<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="a00151.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, segment_size(first_block)-embedded_buckets );
+<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="a00156.html#3c27779fe66b79505390d084310d997e">01299</a> <span class="keywordtype">void</span> <a class="code" href="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00156.html">concurrent_hash_map</a>& source ) {
+<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>
@@ -1192,13 +1192,13 @@
 <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="a00156.html#13f3f2e8de7564be03882c31559493c9">rehash</a>();
-<a name="l01319"></a>01319     } <span class="keywordflow">else</span> <a class="code" href="a00156.html#3c27779fe66b79505390d084310d997e">internal_copy</a>( source.<a class="code" href="a00156.html#4a3c58cf1234b74ca796dcf555d32f53">begin</a>(), source.<a class="code" href="a00156.html#28c690486d8db5783475f5b1a59d21bc">end</a>() );
+<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="a00156.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>(I first, I last) {
+<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 );
diff --git a/doc/html/a00335.html b/doc/html/a00335.html
deleted file mode 100644
index 243821a..0000000
--- a/doc/html/a00335.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="a00160.html">00035</a> <span class="keyword">class </span><a class="code" href="a00160.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="a00160.html#682c3978d5cb0620000994f11c44a476">00057</a>     <span class="keyword">typedef</span> T <a class="code" href="a00160.html#682c3978d5cb0620000994f11c44a476">value_type</a>;
-<a name="l00058"></a>00058 
-<a name="l00060"></a><a class="code" href="a00160.html#a8d725c50a9834bb7af5b67c0aff92b8">00060</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00160.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a>;
-<a name="l00061"></a>00061 
-<a name="l00063"></a><a class="code" href="a00160.html#4d48e7ff93f81636bca2c74f7da34750">00063</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00160.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a>;
-<a name="l00064"></a>00064 
-<a name="l00066"></a><a class="code" href="a00160.html#8fc30e93f8342a1960357f71e4fe8a2b">00066</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00160.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>;
-<a name="l00067"></a>00067 
-<a name="l00069"></a><a class="code" href="a00160.html#068576d16c7e4e05d52f9db7a45b5b65">00069</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00160.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a>;
-<a name="l00070"></a>00070 
-<a name="l00072"></a><a class="code" href="a00160.html#5a3956341728eaa558d8827063718cac">00072</a>     <span class="keyword">typedef</span> A <a class="code" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a>;
-<a name="l00073"></a>00073 
-<a name="l00075"></a><a class="code" href="a00160.html#7c48a05a94a1f4f98fdfadfbef98ecf6">00075</a>     <span class="keyword">explicit</span> <a class="code" href="a00160.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(<span class="keyword">const</span> <a class="code" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00160.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="a00160.html#25209656c84f2f9b030e2f9162713341">00082</a>     <a class="code" href="a00160.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00160.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="a00160.html#8a6b98ea11a867db8ac868f0113ca429">00090</a>     <a class="code" href="a00160.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00160.html">concurrent_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00160.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="a00160.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>();
-<a name="l00098"></a>00098 
-<a name="l00100"></a><a class="code" href="a00160.html#73c47563ffcc4c2f6452f25a04ebe2e2">00100</a>     <span class="keywordtype">void</span> <a class="code" href="a00160.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="a00160.html#ae31ca0db34ef96ef1e74aa0d28c95f8">00107</a>     <span class="keywordtype">bool</span> <a class="code" href="a00160.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="a00160.html#eaa35a5274606779802e9a669a706260">00112</a>     <a class="code" href="a00160.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> <a class="code" href="a00160.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="a00160.html#f3f6fce0cfa2d581d6f3b47e0613ad64">00115</a>     <span class="keywordtype">bool</span> <a class="code" href="a00160.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="a00160.html#c32e8e84c0524155133b4aae32d2a827">clear</a>() ;
-<a name="l00119"></a>00119 
-<a name="l00121"></a><a class="code" href="a00160.html#f034f70caef445fe8abc9113ec926a8d">00121</a>     <a class="code" href="a00160.html#5a3956341728eaa558d8827063718cac">allocator_type</a> <a class="code" href="a00160.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="a00160.html#830b33753d6b149c366344e29b2edd8c">00136</a> <a class="code" href="a00160.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
-<a name="l00137"></a>00137     <a class="code" href="a00160.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="a00160.html#c32e8e84c0524155133b4aae32d2a827">00142</a> <span class="keywordtype">void</span> <a class="code" href="a00160.html">concurrent_queue<T,A>::clear</a>() {
-<a name="l00143"></a>00143     <span class="keywordflow">while</span>( !<a class="code" href="a00160.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="a00155.html">00158</a> <span class="keyword">class </span><a class="code" href="a00155.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="a00155.html#98245517a931e5893f6601e66c51fc75">00209</a>     <span class="keyword">typedef</span> T <a class="code" href="a00155.html#98245517a931e5893f6601e66c51fc75">value_type</a>;
-<a name="l00210"></a>00210 
-<a name="l00212"></a><a class="code" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">00212</a>     <span class="keyword">typedef</span> A <a class="code" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>;
-<a name="l00213"></a>00213 
-<a name="l00215"></a><a class="code" href="a00155.html#dcd44ca6a88c0dc7a847a47a10811f0c">00215</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00155.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a>;
-<a name="l00216"></a>00216 
-<a name="l00218"></a><a class="code" href="a00155.html#796713d0b9ba93a4721cbe13e4474068">00218</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00155.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a>;
-<a name="l00219"></a>00219 
-<a name="l00221"></a>00221 
-<a name="l00223"></a><a class="code" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">00223</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>;
-<a name="l00224"></a>00224 
-<a name="l00226"></a><a class="code" href="a00155.html#4b45c91297e69515d83d5eef85ae1f49">00226</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00155.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a>;
-<a name="l00227"></a>00227 
-<a name="l00229"></a><a class="code" href="a00155.html#e3525226732963ff0f13e89d8e6dab5b">00229</a>     <span class="keyword">explicit</span> <a class="code" href="a00155.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(<span class="keyword">const</span> <a class="code" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00155.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="a00155.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">00235</a>     <a class="code" href="a00155.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( <span class="keyword">const</span> <a class="code" href="a00155.html">concurrent_bounded_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00155.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="a00155.html#a5e04dcd7db9fd9b583b4e7df832246a">00243</a>     <a class="code" href="a00155.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00155.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="a00155.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>();
-<a name="l00252"></a>00252 
-<a name="l00254"></a><a class="code" href="a00155.html#ceb08c743b11ba88c878e73fff8af20b">00254</a>     <span class="keywordtype">void</span> <a class="code" href="a00155.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="a00155.html#41f4c6bd7a82ab070e840bbf81b0b123">00260</a>     <span class="keywordtype">void</span> <a class="code" href="a00155.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="a00155.html#2bd6232531279fb3ccbd296bea23066b">00267</a>     <span class="keywordtype">bool</span> <a class="code" href="a00155.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="a00155.html#0ca487019bbb00a196442aff78a1e4f7">00274</a>     <span class="keywordtype">bool</span> <a class="code" href="a00155.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="a00155.html#7dc14d1a579a4cccda9f857585e1768d">00282</a>     <a class="code" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00155.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="a00155.html#f64924f2ee9225c368a270fc3c394db9">00285</a>     <span class="keywordtype">bool</span> <a class="code" href="a00155.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="a00155.html#b2888b3e4e837d7e03f2c731963a402b">00288</a>     <a class="code" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00155.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="a00155.html#f3c6c934f85fd02aedbc83a16943193b">00295</a>     <span class="keywordtype">void</span> <a class="code" href="a00155.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>( <a class="code" href="a00155.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="a00155.html#415eb87e53b1c6a266de06ecbc490d16">00300</a>     <a class="code" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> <a class="code" href="a00155.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="a00155.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="a00155.html#acaf5b510dc0dfc7780b8c956cf773cf">00319</a> <a class="code" href="a00155.html">concurrent_bounded_queue<T,A>::~concurrent_bounded_queue</a>() {
-<a name="l00320"></a>00320     <a class="code" href="a00155.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="a00155.html#90b31e2954c6e4596c7900435a5f4bc1">00325</a> <span class="keywordtype">void</span> <a class="code" href="a00155.html">concurrent_bounded_queue<T,A>::clear</a>() {
-<a name="l00326"></a>00326     <span class="keywordflow">while</span>( !<a class="code" href="a00155.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="a00161.html">00341</a> <span class="keyword">class </span><a class="code" href="a00161.html">concurrent_queue</a>: <span class="keyword">public</span> <a class="code" href="a00155.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="a00161.html#aaf19bd7337b72f3131ece60f7315ef7">00348</a>     <span class="keyword">explicit</span> <a class="code" href="a00161.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(<span class="keyword">const</span> A& a = A()) : 
-<a name="l00349"></a>00349         <a class="code" href="a00155.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="a00161.html#fc092b9082f233482f3513fc3bb670f7">00354</a>     <a class="code" href="a00161.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00161.html">concurrent_queue</a>& src, <span class="keyword">const</span> A& a = A()) : 
-<a name="l00355"></a>00355         <a class="code" href="a00155.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="a00161.html#9102b897776bd2d9e908e6604ff16b5f">00361</a>     <a class="code" href="a00161.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="a00155.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="a00161.html#7c45561bafe71107d09b2bc1b8f4e681">00369</a>     <span class="keywordtype">bool</span> <a class="code" href="a00161.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="a00155.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="a00161.html#48da3536245318af6cb5fd58bac78039">00378</a>     <span class="keywordtype">bool</span> <a class="code" href="a00161.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>( T& destination ) {
-<a name="l00379"></a>00379         <span class="keywordflow">return</span> <a class="code" href="a00155.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="a00155.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="a00155.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/a00336.html b/doc/html/a00336.html
index 0c97317..f0909fc 100644
--- a/doc/html/a00336.html
+++ b/doc/html/a00336.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_map.h Source File</title>
+<title>concurrent_queue.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,219 +39,321 @@
 <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="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="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="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="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="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="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="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> 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="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     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="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="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="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="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="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     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="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="l00211"></a>00211         <span class="keywordflow">return</span> ((*where).second);
-<a name="l00212"></a>00212     }
+<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="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>
+<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.
diff --git a/doc/html/a00336.html b/doc/html/a00337.html
similarity index 100%
copy from doc/html/a00336.html
copy to doc/html/a00337.html
diff --git a/doc/html/a00341.html b/doc/html/a00342.html
similarity index 94%
rename from doc/html/a00341.html
rename to doc/html/a00342.html
index 32df0c7..58dc890 100644
--- a/doc/html/a00341.html
+++ b/doc/html/a00342.html
@@ -219,7 +219,7 @@
 <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="a00162.html">tbb::concurrent_vector</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>
@@ -263,7 +263,7 @@
 <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="a00162.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
+<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*();}
@@ -372,21 +372,21 @@
 <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="a00162.html">00442</a> <span class="keyword">class </span><a class="code" href="a00162.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, 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="a00148.html">blocked_range</a><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="a00148.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
+<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="a00148.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="a00148.html">blocked_range<I></a>(r,<a class="code" href="a00198.html">split</a>()) {}
+<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>
@@ -428,13 +428,13 @@
 <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="a00162.html#2c8ca9cabfcd30ad5943324c853664b5">00499</a>     <span class="keyword">explicit</span> <a class="code" href="a00162.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+<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="a00162.html#dd8a200b99a8088435a37934b58fe335">00506</a>     <a class="code" href="a00162.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00162.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+<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;
@@ -448,12 +448,12 @@
 <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="a00162.html#64432f13f7b29bfe4acfb5568f34f3a8">00521</a>     <a class="code" href="a00162.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00162.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+<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="a00162.html#bb5ae659871478f1f5c68039e1273e12">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), &copy_array);
+<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 );
@@ -461,7 +461,7 @@
 <a name="l00531"></a>00531         }
 <a name="l00532"></a>00532     }
 <a name="l00533"></a>00533 
-<a name="l00535"></a><a class="code" href="a00162.html#2a2e261dfe1cab3f73f7b1a94137cfca">00535</a>     <span class="keyword">explicit</span> <a class="code" href="a00162.html">concurrent_vector</a>(size_type n)
+<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 {
@@ -473,7 +473,7 @@
 <a name="l00544"></a>00544         }
 <a name="l00545"></a>00545     }
 <a name="l00546"></a>00546 
-<a name="l00548"></a><a class="code" href="a00162.html#3883a8a908b44e249a57f454de3f55d8">00548</a>     <a class="code" href="a00162.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
+<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;
@@ -487,7 +487,7 @@
 <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="a00162.html#4450de83c5862ea4bcd9443fd7e67419">00563</a>     <a class="code" href="a00162.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<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;
@@ -500,14 +500,14 @@
 <a name="l00573"></a>00573         }
 <a name="l00574"></a>00574     }
 <a name="l00575"></a>00575 
-<a name="l00577"></a><a class="code" href="a00162.html#691f0f3cda3e489c37a657016e375eaf">00577</a>     <a class="code" href="a00162.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00162.html">concurrent_vector</a>& vector ) {
+<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="a00162.html#19f4ab88a01b0fd056af3bba463e7bd6">00585</a>     <a class="code" href="a00162.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00162.html">concurrent_vector<T, M></a>& vector ) {
+<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);
@@ -519,36 +519,36 @@
 <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="a00162.html#30484e3959892fd5392fa93c873c31f0">00598</a>     size_type grow_by( size_type delta ) {
+<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="a00162.html#c8177b1865270ea68aa1ab9148e5e35e">00603</a>     iterator grow_by( size_type delta ) {
+<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="a00162.html#38274ab3f772ecba600c7daca7690102">00611</a>     size_type grow_by( size_type delta, const_reference t ) {
+<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="a00162.html#473a59a4c9308b93411b898b3110d26c">00616</a>     iterator grow_by( size_type delta, const_reference t ) {
+<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="a00162.html#47fe588214dd5fa06ab6e8ab78d83874">00625</a>     <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
+<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="a00162.html#a7e3b67c8ccab16d0aecc80899ae799d">00633</a>     iterator grow_to_at_least( size_type n ) {
+<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 );
@@ -559,7 +559,7 @@
 <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="a00162.html#e94e038f915c0268fdf2d3d7f87d81b8">00645</a> <span class="preprocessor"></span>    size_type push_back( const_reference item )
+<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 )
@@ -577,108 +577,108 @@
 <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="a00162.html#4c52f2950bb1832886bd4458eb09d7eb">00665</a>     reference operator[]( size_type index ) {
+<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="a00162.html#c6fade5c732cc95274d1d8277ea619d1">00670</a>     const_reference operator[]( size_type index )<span class="keyword"> const </span>{
+<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="a00162.html#0c073ca43e787c7cbf7b0e26d2221748">00675</a>     reference at( size_type index ) {
+<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="a00162.html#23e14a38af748edff96a7adc3a0f1c58">00680</a>     const_reference at( size_type index )<span class="keyword"> const </span>{
+<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="a00162.html#a4c6ffff3bf08b92939aa2fc516edfba">00685</a>     range_type range( size_t grainsize = 1) {
+<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="a00162.html#3d09ccfb581b879ae64203741035e193">00690</a>     const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
+<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="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">00697</a> <span class="comment"></span>    size_type size()<span class="keyword"> const </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="a00162.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="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="a00162.html#3ed6b9ae7217af5103d974045b6f5cd5">00706</a>     size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
+<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="a00162.html#5a0ce05026994b010018f72cfdeb72c1">00711</a>     <span class="keywordtype">void</span> reserve( size_type n ) {
+<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="a00162.html#8dfb0cb0eef96d440b4dcf801807a718">00717</a>     <span class="keywordtype">void</span> resize( size_type n ) {
+<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="a00162.html#98ce6b2c6d2622f0c030b46dfac3880c">00722</a>     <span class="keywordtype">void</span> resize( size_type n, const_reference t ) {
+<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="a00162.html#1693d1da41b1a8235871be9c6633be35">00728</a> <span class="preprocessor">    void compact() {shrink_to_fit();}</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="a00162.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="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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.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="a00162.html#5e220926d09236d98f04fe0721e5f9a1">00754</a>     reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
-<a name="l00756"></a><a class="code" href="a00162.html#290119a4eb43cd6a9e98fa17016ba3c2">00756</a>     reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
-<a name="l00758"></a><a class="code" href="a00162.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="a00162.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="a00162.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="a00162.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="a00162.html#15181759c0bfa2ddce5d10c7550e0002">00766</a>     reference front() {
+<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="a00162.html#502615a858eb9fa0390ee59169065e90">00771</a>     const_reference front()<span class="keyword"> const </span>{
+<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="a00162.html#41ce48d6015a1a2812d41cf620ec3476">00776</a>     reference back() {
+<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="a00162.html#bd518e204107d07fd08d0ec5bdfd383d">00781</a>     const_reference back()<span class="keyword"> const </span>{
+<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="a00162.html#2fdba8e90de6a4d2300222236d46758e">00786</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<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="a00162.html#423e5aa15e0e3309ad86d026fd85f6f6">00789</a>     <span class="keywordtype">void</span> assign(size_type n, const_reference t) {
+<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="a00162.html#93a06b3112cb804f42f40efb5e7387b4">00796</a>     <span class="keywordtype">void</span> assign(I first, I last) {
+<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="a00162.html#96c9c4bd968ed3edb8dd276854d2dae0">00801</a>     <span class="keywordtype">void</span> swap(<a class="code" href="a00162.html">concurrent_vector</a> &vector) {
+<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);
@@ -686,11 +686,11 @@
 <a name="l00806"></a>00806     }
 <a name="l00807"></a>00807 
 <a name="l00809"></a>00809 
-<a name="l00810"></a><a class="code" href="a00162.html#26f937a359a66b6aae904c3cd9a3c444">00810</a>     <span class="keywordtype">void</span> clear() {
+<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="a00162.html#da2444b28bb840d38f60d0030333a5fc">00815</a>     ~<a class="code" href="a00162.html">concurrent_vector</a>() {
+<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>
@@ -754,7 +754,7 @@
 <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="a00162.html#03c6f4cf66532bf4cc907ee738a9a186">00894</a> <span class="keywordtype">void</span> <a class="code" href="a00162.html">concurrent_vector<T, A>::shrink_to_fit</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 ) )
@@ -767,7 +767,7 @@
 <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="a00162.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="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;
@@ -820,7 +820,7 @@
 <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="a00162.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>());
+<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 );
diff --git a/doc/html/a00350.html b/doc/html/a00351.html
similarity index 100%
rename from doc/html/a00350.html
rename to doc/html/a00351.html
diff --git a/doc/html/a00353.html b/doc/html/a00353.html
deleted file mode 100644
index f99c54b..0000000
--- a/doc/html/a00353.html
+++ /dev/null
@@ -1,1019 +0,0 @@
-<!DOCTYPE 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">#if __SUNPRO_CC</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include <string.h></span>  <span class="comment">// for memcpy</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#else</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span>
-<a name="l00037"></a>00037 <span class="keyword">namespace </span>tbb {
-<a name="l00038"></a>00038 
-<a name="l00040"></a><a class="code" href="a00267.html#a8622ae61b7e7737dac26542e181178e">00040</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="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="keyword">namespace </span>interface5 {
-<a name="l00043"></a>00043  
-<a name="l00045"></a>00045     <span class="keyword">namespace </span>internal { 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00048"></a>00048         <span class="keyword">class </span>ets_base: tbb::internal::no_copy {
-<a name="l00049"></a>00049         <span class="keyword">protected</span>:
-<a name="l00050"></a>00050 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD key_type;
-<a name="l00052"></a>00052 <span class="preprocessor">#else</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_t key_type;
-<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>        <span class="keyword">public</span>:
-<a name="l00057"></a>00057 <span class="preprocessor">#endif</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>            <span class="keyword">struct </span>slot;
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060             <span class="keyword">struct </span>array {
-<a name="l00061"></a>00061                 array* next;
-<a name="l00062"></a>00062                 size_t lg_size;
-<a name="l00063"></a>00063                 slot& at( size_t k ) {
-<a name="l00064"></a>00064                     <span class="keywordflow">return</span> ((slot*)(<span class="keywordtype">void</span>*)(<span class="keyword">this</span>+1))[k];
-<a name="l00065"></a>00065                 }
-<a name="l00066"></a>00066                 size_t size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (size_t)1<<lg_size;}
-<a name="l00067"></a>00067                 size_t mask()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size()-1;}
-<a name="l00068"></a>00068                 size_t start( size_t h )<span class="keyword"> const </span>{
-<a name="l00069"></a>00069                     <span class="keywordflow">return</span> h>>(8*<span class="keyword">sizeof</span>(size_t)-lg_size);
-<a name="l00070"></a>00070                 }
-<a name="l00071"></a>00071             };
-<a name="l00072"></a>00072             <span class="keyword">struct </span>slot {
-<a name="l00073"></a>00073                 key_type key;
-<a name="l00074"></a>00074                 <span class="keywordtype">void</span>* ptr;
-<a name="l00075"></a>00075                 <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !key;}
-<a name="l00076"></a>00076                 <span class="keywordtype">bool</span> match( key_type k )<span class="keyword"> const </span>{<span class="keywordflow">return</span> key==k;}
-<a name="l00077"></a>00077                 <span class="keywordtype">bool</span> claim( key_type k ) {
-<a name="l00078"></a>00078                     __TBB_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00143.html">tbb::atomic<key_type></a>)==<span class="keyword">sizeof</span>(key_type), NULL);
-<a name="l00079"></a>00079                     __TBB_ASSERT(<span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)==<span class="keyword">sizeof</span>(tbb::atomic<key_type>*), NULL);
-<a name="l00080"></a>00080                     <span class="keyword">union </span>{ <span class="keywordtype">void</span>* space; tbb::atomic<key_type>* key_atomic; } helper;
-<a name="l00081"></a>00081                     helper.space = &key;
-<a name="l00082"></a>00082                     <span class="keywordflow">return</span> helper.key_atomic->compare_and_swap(k,0)==0;
-<a name="l00083"></a>00083                 }
-<a name="l00084"></a>00084             };
-<a name="l00085"></a>00085 <span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>        <span class="keyword">protected</span>:
-<a name="l00087"></a>00087 <span class="preprocessor">#endif</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>        
-<a name="l00089"></a>00089             <span class="keyword">static</span> key_type key_of_current_thread() {
-<a name="l00090"></a>00090                tbb::tbb_thread::id <span class="keywordtype">id</span> = tbb::this_tbb_thread::get_id();
-<a name="l00091"></a>00091                key_type k;
-<a name="l00092"></a>00092                memcpy( &k, &<span class="keywordtype">id</span>, <span class="keyword">sizeof</span>(k) );
-<a name="l00093"></a>00093                <span class="keywordflow">return</span> k;
-<a name="l00094"></a>00094             }
-<a name="l00095"></a>00095 
-<a name="l00097"></a>00097 
-<a name="l00099"></a>00099             atomic<array*> my_root;
-<a name="l00100"></a>00100             atomic<size_t> my_count;
-<a name="l00101"></a>00101             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
-<a name="l00102"></a>00102             <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="l00103"></a>00103             <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="l00104"></a>00104             array* allocate( size_t lg_size ) {
-<a name="l00105"></a>00105                 size_t n = 1<<lg_size;  
-<a name="l00106"></a>00106                 array* a = static_cast<array*>(create_array( <span class="keyword">sizeof</span>(array)+n*<span class="keyword">sizeof</span>(slot) ));
-<a name="l00107"></a>00107                 a->lg_size = lg_size;
-<a name="l00108"></a>00108                 std::memset( a+1, 0, n*<span class="keyword">sizeof</span>(slot) );
-<a name="l00109"></a>00109                 <span class="keywordflow">return</span> a;
-<a name="l00110"></a>00110             }
-<a name="l00111"></a>00111             <span class="keywordtype">void</span> free(array* a) {
-<a name="l00112"></a>00112                 size_t n = 1<<(a->lg_size);  
-<a name="l00113"></a>00113                 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="l00114"></a>00114             }
-<a name="l00115"></a>00115             <span class="keyword">static</span> size_t hash( key_type k ) {
-<a name="l00116"></a>00116                 <span class="comment">// Multiplicative hashing.  Client should use *upper* bits.</span>
-<a name="l00117"></a>00117                 <span class="comment">// casts required for Mac gcc4.* compiler</span>
-<a name="l00118"></a>00118 <span class="preprocessor">#if __TBB_WORDSIZE == 4</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span>                <span class="keywordflow">return</span> uintptr_t(k)*0x9E3779B9;
-<a name="l00120"></a>00120 <span class="preprocessor">#else</span>
-<a name="l00121"></a>00121 <span class="preprocessor"></span>                <span class="keywordflow">return</span> uintptr_t(k)*0x9E3779B97F4A7C15;
-<a name="l00122"></a>00122 <span class="preprocessor">#endif </span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span>            } 
-<a name="l00124"></a>00124         
-<a name="l00125"></a>00125             ets_base() {my_root=NULL; my_count=0;}
-<a name="l00126"></a>00126             <span class="keyword">virtual</span> ~ets_base();  <span class="comment">// g++ complains if this is not virtual...</span>
-<a name="l00127"></a>00127             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists );
-<a name="l00128"></a>00128             <span class="keywordtype">void</span> table_clear();
-<a name="l00129"></a>00129             slot& table_find( key_type k ) {
-<a name="l00130"></a>00130                 size_t h = hash(k);
-<a name="l00131"></a>00131                 array* r = my_root;
-<a name="l00132"></a>00132                 size_t mask = r->mask();
-<a name="l00133"></a>00133                 <span class="keywordflow">for</span>(size_t i = r->start(h);;i=(i+1)&mask) {
-<a name="l00134"></a>00134                     slot& s = r->at(i);
-<a name="l00135"></a>00135                     <span class="keywordflow">if</span>( s.empty() || s.match(k) )
-<a name="l00136"></a>00136                         <span class="keywordflow">return</span> s;
-<a name="l00137"></a>00137                 }
-<a name="l00138"></a>00138             }
-<a name="l00139"></a>00139             <span class="keywordtype">void</span> table_reserve_for_copy( <span class="keyword">const</span> ets_base& other ) {
-<a name="l00140"></a>00140                 __TBB_ASSERT(!my_root,NULL);
-<a name="l00141"></a>00141                 __TBB_ASSERT(!my_count,NULL);
-<a name="l00142"></a>00142                 <span class="keywordflow">if</span>( other.my_root ) {
-<a name="l00143"></a>00143                     array* a = allocate(other.my_root->lg_size);
-<a name="l00144"></a>00144                     a->next = NULL;
-<a name="l00145"></a>00145                     my_root = a;
-<a name="l00146"></a>00146                     my_count = other.my_count;
-<a name="l00147"></a>00147                 }
-<a name="l00148"></a>00148             }
-<a name="l00149"></a>00149         };
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00152"></a>00152         ets_base<ETS_key_type>::~ets_base() {
-<a name="l00153"></a>00153             __TBB_ASSERT(!my_root, NULL);
-<a name="l00154"></a>00154         }
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00157"></a>00157         <span class="keywordtype">void</span> ets_base<ETS_key_type>::table_clear() {
-<a name="l00158"></a>00158             <span class="keywordflow">while</span>( array* r = my_root ) {
-<a name="l00159"></a>00159                 my_root = r->next;
-<a name="l00160"></a>00160                 free(r);
-<a name="l00161"></a>00161             }
-<a name="l00162"></a>00162             my_count = 0;
-<a name="l00163"></a>00163         }
-<a name="l00164"></a>00164                 
-<a name="l00165"></a>00165         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00166"></a>00166         <span class="keywordtype">void</span>* ets_base<ETS_key_type>::table_lookup( <span class="keywordtype">bool</span>& exists ) {
-<a name="l00167"></a>00167             <span class="keyword">const</span> key_type k = key_of_current_thread(); 
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169             __TBB_ASSERT(k!=0,NULL);
-<a name="l00170"></a>00170             <span class="keywordtype">void</span>* found;
-<a name="l00171"></a>00171             size_t h = hash(k);
-<a name="l00172"></a>00172             <span class="keywordflow">for</span>( array* r=my_root; r; r=r->next ) {
-<a name="l00173"></a>00173                 size_t mask=r->mask();
-<a name="l00174"></a>00174                 <span class="keywordflow">for</span>(size_t i = r->start(h); ;i=(i+1)&mask) {
-<a name="l00175"></a>00175                     slot& s = r->at(i);
-<a name="l00176"></a>00176                     <span class="keywordflow">if</span>( s.empty() ) <span class="keywordflow">break</span>;
-<a name="l00177"></a>00177                     <span class="keywordflow">if</span>( s.match(k) ) {
-<a name="l00178"></a>00178                         <span class="keywordflow">if</span>( r==my_root ) {
-<a name="l00179"></a>00179                             <span class="comment">// Success at top level</span>
-<a name="l00180"></a>00180                             exists = <span class="keyword">true</span>;
-<a name="l00181"></a>00181                             <span class="keywordflow">return</span> s.ptr;
-<a name="l00182"></a>00182                         } <span class="keywordflow">else</span> {
-<a name="l00183"></a>00183                             <span class="comment">// Success at some other level.  Need to insert at top level.</span>
-<a name="l00184"></a>00184                             exists = <span class="keyword">true</span>;
-<a name="l00185"></a>00185                             found = s.ptr;
-<a name="l00186"></a>00186                             <span class="keywordflow">goto</span> insert;
-<a name="l00187"></a>00187                         }
-<a name="l00188"></a>00188                     }
-<a name="l00189"></a>00189                 }
-<a name="l00190"></a>00190             }
-<a name="l00191"></a>00191             <span class="comment">// Key does not yet exist</span>
-<a name="l00192"></a>00192             exists = <span class="keyword">false</span>;
-<a name="l00193"></a>00193             found = create_local();
-<a name="l00194"></a>00194             {
-<a name="l00195"></a>00195                 size_t c = ++my_count;
-<a name="l00196"></a>00196                 array* r = my_root;
-<a name="l00197"></a>00197                 <span class="keywordflow">if</span>( !r || c>r->size()/2 ) {
-<a name="l00198"></a>00198                     size_t s = r ? r->lg_size : 2;
-<a name="l00199"></a>00199                     <span class="keywordflow">while</span>( c>size_t(1)<<(s-1) ) ++s;
-<a name="l00200"></a>00200                     array* a = allocate(s);
-<a name="l00201"></a>00201                     <span class="keywordflow">for</span>(;;) {
-<a name="l00202"></a>00202                         a->next = my_root;
-<a name="l00203"></a>00203                         array* new_r = my_root.compare_and_swap(a,r);
-<a name="l00204"></a>00204                         <span class="keywordflow">if</span>( new_r==r ) <span class="keywordflow">break</span>;
-<a name="l00205"></a>00205                         <span class="keywordflow">if</span>( new_r->lg_size>=s ) {
-<a name="l00206"></a>00206                             <span class="comment">// Another thread inserted an equal or  bigger array, so our array is superfluous.</span>
-<a name="l00207"></a>00207                             free(a);
-<a name="l00208"></a>00208                             <span class="keywordflow">break</span>;
-<a name="l00209"></a>00209                         }
-<a name="l00210"></a>00210                         r = new_r;
-<a name="l00211"></a>00211                     }
-<a name="l00212"></a>00212                 }
-<a name="l00213"></a>00213             }
-<a name="l00214"></a>00214         insert:
-<a name="l00215"></a>00215             <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="l00216"></a>00216             array* ir = my_root;
-<a name="l00217"></a>00217             size_t mask = ir->mask();
-<a name="l00218"></a>00218             <span class="keywordflow">for</span>(size_t i = ir->start(h);;i=(i+1)&mask) {
-<a name="l00219"></a>00219                 slot& s = ir->at(i);
-<a name="l00220"></a>00220                 <span class="keywordflow">if</span>( s.empty() ) {
-<a name="l00221"></a>00221                     <span class="keywordflow">if</span>( s.claim(k) ) {
-<a name="l00222"></a>00222                         s.ptr = found;
-<a name="l00223"></a>00223                         <span class="keywordflow">return</span> found;
-<a name="l00224"></a>00224                     }
-<a name="l00225"></a>00225                 }
-<a name="l00226"></a>00226             }
-<a name="l00227"></a>00227         };
-<a name="l00228"></a>00228 
-<a name="l00230"></a>00230         <span class="keyword">template</span> <>
-<a name="l00231"></a>00231         <span class="keyword">class </span>ets_base<ets_key_per_instance>: <span class="keyword">protected</span> ets_base<ets_no_key> {
-<a name="l00232"></a>00232             <span class="keyword">typedef</span> ets_base<ets_no_key> super;
-<a name="l00233"></a>00233 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00234"></a>00234 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD tls_key_t;
-<a name="l00235"></a>00235             <span class="keywordtype">void</span> create_key() { my_key = TlsAlloc(); }
-<a name="l00236"></a>00236             <span class="keywordtype">void</span> destroy_key() { TlsFree(my_key); }
-<a name="l00237"></a>00237             <span class="keywordtype">void</span> set_tls(<span class="keywordtype">void</span> * value) { TlsSetValue(my_key, (LPVOID)value); }
-<a name="l00238"></a>00238             <span class="keywordtype">void</span>* get_tls() { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)TlsGetValue(my_key); }
-<a name="l00239"></a>00239 <span class="preprocessor">#else</span>
-<a name="l00240"></a>00240 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_key_t tls_key_t;
-<a name="l00241"></a>00241             <span class="keywordtype">void</span> create_key() { pthread_key_create(&my_key, NULL); }
-<a name="l00242"></a>00242             <span class="keywordtype">void</span> destroy_key() { pthread_key_delete(my_key); }
-<a name="l00243"></a>00243             <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="l00244"></a>00244             <span class="keywordtype">void</span>* get_tls()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pthread_getspecific(my_key); }
-<a name="l00245"></a>00245 <span class="preprocessor">#endif</span>
-<a name="l00246"></a>00246 <span class="preprocessor"></span>            tls_key_t my_key;
-<a name="l00247"></a>00247             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
-<a name="l00248"></a>00248             <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="l00249"></a>00249             <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="l00250"></a>00250         <span class="keyword">public</span>:
-<a name="l00251"></a>00251             ets_base() {create_key();}
-<a name="l00252"></a>00252             ~ets_base() {destroy_key();}
-<a name="l00253"></a>00253             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists ) {
-<a name="l00254"></a>00254                 <span class="keywordtype">void</span>* found = get_tls();
-<a name="l00255"></a>00255                 <span class="keywordflow">if</span>( found ) {
-<a name="l00256"></a>00256                     exists=<span class="keyword">true</span>;
-<a name="l00257"></a>00257                 } <span class="keywordflow">else</span> {
-<a name="l00258"></a>00258                     found = super::table_lookup(exists);
-<a name="l00259"></a>00259                     set_tls(found);
-<a name="l00260"></a>00260                 }
-<a name="l00261"></a>00261                 <span class="keywordflow">return</span> found; 
-<a name="l00262"></a>00262             }
-<a name="l00263"></a>00263             <span class="keywordtype">void</span> table_clear() {
-<a name="l00264"></a>00264                 destroy_key();
-<a name="l00265"></a>00265                 create_key(); 
-<a name="l00266"></a>00266                 super::table_clear();
-<a name="l00267"></a>00267             }
-<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> Container, <span class="keyword">typename</span> Value >
-<a name="l00272"></a>00272         <span class="keyword">class </span>enumerable_thread_specific_iterator 
-<a name="l00273"></a>00273 #if defined(_WIN64) && defined(_MSC_VER) 
-<a name="l00274"></a>00274             <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
-<a name="l00275"></a>00275             : public std::iterator<std::random_access_iterator_tag,Value>
-<a name="l00276"></a>00276 #endif <span class="comment">/* defined(_WIN64) && defined(_MSC_VER) */</span>
-<a name="l00277"></a>00277         {
-<a name="l00279"></a>00279         
-<a name="l00280"></a>00280             Container *my_container;
-<a name="l00281"></a>00281             <span class="keyword">typename</span> Container::size_type my_index;
-<a name="l00282"></a>00282             <span class="keyword">mutable</span> Value *my_value;
-<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>
-<a name="l00285"></a>00285             <span class="keyword">friend</span> enumerable_thread_specific_iterator<C,T> operator+( ptrdiff_t offset, 
-<a name="l00286"></a>00286                                                                        <span class="keyword">const</span> enumerable_thread_specific_iterator<C,T>& v );
-<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==( <span class="keyword">const</span> 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> <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<C,T>& i, 
-<a name="l00294"></a>00294                                    <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
-<a name="l00295"></a>00295         
-<a name="l00296"></a>00296             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00297"></a>00297             <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="l00298"></a>00298             
-<a name="l00299"></a>00299             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
-<a name="l00300"></a>00300             <span class="keyword">friend</span> <span class="keyword">class </span>enumerable_thread_specific_iterator;
-<a name="l00301"></a>00301         
-<a name="l00302"></a>00302             <span class="keyword">public</span>:
-<a name="l00303"></a>00303         
-<a name="l00304"></a>00304             enumerable_thread_specific_iterator( <span class="keyword">const</span> Container &container, <span class="keyword">typename</span> Container::size_type index ) : 
-<a name="l00305"></a>00305                 my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}
-<a name="l00306"></a>00306         
-<a name="l00308"></a>00308             enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}
-<a name="l00309"></a>00309         
-<a name="l00310"></a>00310             <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00311"></a>00311             enumerable_thread_specific_iterator( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container, U>& other ) :
-<a name="l00312"></a>00312                     my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}
-<a name="l00313"></a>00313         
-<a name="l00314"></a>00314             enumerable_thread_specific_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00315"></a>00315                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator(*my_container, my_index + offset);
-<a name="l00316"></a>00316             }
-<a name="l00317"></a>00317         
-<a name="l00318"></a>00318             enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {
-<a name="l00319"></a>00319                 my_index += offset;
-<a name="l00320"></a>00320                 my_value = NULL;
-<a name="l00321"></a>00321                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00322"></a>00322             }
-<a name="l00323"></a>00323         
-<a name="l00324"></a>00324             enumerable_thread_specific_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00325"></a>00325                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator( *my_container, my_index-offset );
-<a name="l00326"></a>00326             }
-<a name="l00327"></a>00327         
-<a name="l00328"></a>00328             enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {
-<a name="l00329"></a>00329                 my_index -= offset;
-<a name="l00330"></a>00330                 my_value = NULL;
-<a name="l00331"></a>00331                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00332"></a>00332             }
-<a name="l00333"></a>00333         
-<a name="l00334"></a>00334             Value& operator*()<span class="keyword"> const </span>{
-<a name="l00335"></a>00335                 Value* value = my_value;
-<a name="l00336"></a>00336                 <span class="keywordflow">if</span>( !value ) {
-<a name="l00337"></a>00337                     value = my_value = reinterpret_cast<Value *>(&(*my_container)[my_index].value);
-<a name="l00338"></a>00338                 }
-<a name="l00339"></a>00339                 __TBB_ASSERT( value==reinterpret_cast<Value *>(&(*my_container)[my_index].value), <span class="stringliteral">"corrupt cache"</span> );
-<a name="l00340"></a>00340                 <span class="keywordflow">return</span> *value;
-<a name="l00341"></a>00341             }
-<a name="l00342"></a>00342         
-<a name="l00343"></a>00343             Value& operator[]( ptrdiff_t k )<span class="keyword"> const </span>{
-<a name="l00344"></a>00344                <span class="keywordflow">return</span> (*my_container)[my_index + k].value;
-<a name="l00345"></a>00345             }
-<a name="l00346"></a>00346         
-<a name="l00347"></a>00347             Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00348"></a>00348         
-<a name="l00349"></a>00349             enumerable_thread_specific_iterator& operator++() {
-<a name="l00350"></a>00350                 ++my_index;
-<a name="l00351"></a>00351                 my_value = NULL;
-<a name="l00352"></a>00352                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00353"></a>00353             }
-<a name="l00354"></a>00354         
-<a name="l00355"></a>00355             enumerable_thread_specific_iterator& operator--() {
-<a name="l00356"></a>00356                 --my_index;
-<a name="l00357"></a>00357                 my_value = NULL;
-<a name="l00358"></a>00358                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00359"></a>00359             }
-<a name="l00360"></a>00360         
-<a name="l00362"></a>00362             enumerable_thread_specific_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00363"></a>00363                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
-<a name="l00364"></a>00364                 ++my_index;
-<a name="l00365"></a>00365                 my_value = NULL;
-<a name="l00366"></a>00366                 <span class="keywordflow">return</span> result;
-<a name="l00367"></a>00367             }
-<a name="l00368"></a>00368         
-<a name="l00370"></a>00370             enumerable_thread_specific_iterator operator--(<span class="keywordtype">int</span>) {
-<a name="l00371"></a>00371                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
-<a name="l00372"></a>00372                 --my_index;
-<a name="l00373"></a>00373                 my_value = NULL;
-<a name="l00374"></a>00374                 <span class="keywordflow">return</span> result;
-<a name="l00375"></a>00375             }
-<a name="l00376"></a>00376         
-<a name="l00377"></a>00377             <span class="comment">// STL support</span>
-<a name="l00378"></a>00378             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00379"></a>00379             <span class="keyword">typedef</span> Value value_type;
-<a name="l00380"></a>00380             <span class="keyword">typedef</span> Value* pointer;
-<a name="l00381"></a>00381             <span class="keyword">typedef</span> Value& reference;
-<a name="l00382"></a>00382             <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
-<a name="l00383"></a>00383         };
-<a name="l00384"></a>00384         
-<a name="l00385"></a>00385         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
-<a name="l00386"></a>00386         enumerable_thread_specific_iterator<Container,T> operator+( ptrdiff_t offset, 
-<a name="l00387"></a>00387                                                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& v ) {
-<a name="l00388"></a>00388             <span class="keywordflow">return</span> enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );
-<a name="l00389"></a>00389         }
-<a name="l00390"></a>00390         
-<a name="l00391"></a>00391         <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="l00392"></a>00392         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00393"></a>00393                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00394"></a>00394             <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_container == j.my_container;
-<a name="l00395"></a>00395         }
-<a name="l00396"></a>00396         
-<a name="l00397"></a>00397         <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="l00398"></a>00398         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00399"></a>00399                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00400"></a>00400             <span class="keywordflow">return</span> !(i==j);
-<a name="l00401"></a>00401         }
-<a name="l00402"></a>00402         
-<a name="l00403"></a>00403         <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="l00404"></a>00404         <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00405"></a>00405                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00406"></a>00406             <span class="keywordflow">return</span> i.my_index<j.my_index;
-<a name="l00407"></a>00407         }
-<a name="l00408"></a>00408         
-<a name="l00409"></a>00409         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00410"></a>00410         <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00411"></a>00411                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00412"></a>00412             <span class="keywordflow">return</span> j<i;
-<a name="l00413"></a>00413         }
-<a name="l00414"></a>00414         
-<a name="l00415"></a>00415         <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="l00416"></a>00416         <span class="keywordtype">bool</span> operator>=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00417"></a>00417                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00418"></a>00418             <span class="keywordflow">return</span> !(i<j);
-<a name="l00419"></a>00419         }
-<a name="l00420"></a>00420         
-<a name="l00421"></a>00421         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00422"></a>00422         <span class="keywordtype">bool</span> operator<=( const enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00423"></a>00423                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00424"></a>00424             <span class="keywordflow">return</span> !(j<i);
-<a name="l00425"></a>00425         }
-<a name="l00426"></a>00426         
-<a name="l00427"></a>00427         <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="l00428"></a>00428         ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00429"></a>00429                              <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00430"></a>00430             <span class="keywordflow">return</span> i.my_index-j.my_index;
-<a name="l00431"></a>00431         }
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433     <span class="keyword">template</span><<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> Value >
-<a name="l00434"></a>00434         <span class="keyword">class </span>segmented_iterator
-<a name="l00435"></a>00435 #if defined(_WIN64) && defined(_MSC_VER)
-<a name="l00436"></a>00436         : public std::iterator<std::input_iterator_tag, Value>
-<a name="l00437"></a>00437 #endif
-<a name="l00438"></a>00438         {
-<a name="l00439"></a>00439             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00440"></a>00440             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> segmented_iterator<C,T>& i, <span class="keyword">const</span> segmented_iterator<C,U>& j);
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00443"></a>00443             <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="l00444"></a>00444             
-<a name="l00445"></a>00445             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
-<a name="l00446"></a>00446             <span class="keyword">friend</span> <span class="keyword">class </span>segmented_iterator;
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448             <span class="keyword">public</span>:
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450                 segmented_iterator() {my_segcont = NULL;}
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452                 segmented_iterator( <span class="keyword">const</span> SegmentedContainer& _segmented_container ) : 
-<a name="l00453"></a>00453                     my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),
-<a name="l00454"></a>00454                     outer_iter(my_segcont->end()) { }
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456                 ~segmented_iterator() {}
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::iterator outer_iterator;
-<a name="l00459"></a>00459                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::value_type InnerContainer;
-<a name="l00460"></a>00460                 <span class="keyword">typedef</span> <span class="keyword">typename</span> InnerContainer::iterator inner_iterator;
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462                 <span class="comment">// STL support</span>
-<a name="l00463"></a>00463                 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00464"></a>00464                 <span class="keyword">typedef</span> Value value_type;
-<a name="l00465"></a>00465                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::size_type size_type;
-<a name="l00466"></a>00466                 <span class="keyword">typedef</span> Value* pointer;
-<a name="l00467"></a>00467                 <span class="keyword">typedef</span> Value& reference;
-<a name="l00468"></a>00468                 <span class="keyword">typedef</span> std::input_iterator_tag iterator_category;
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470                 <span class="comment">// Copy Constructor</span>
-<a name="l00471"></a>00471                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00472"></a>00472                 segmented_iterator(<span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) :
-<a name="l00473"></a>00473                     my_segcont(other.my_segcont),
-<a name="l00474"></a>00474                     outer_iter(other.outer_iter),
-<a name="l00475"></a>00475                     <span class="comment">// can we assign a default-constructed iterator to inner if we're at the end?</span>
-<a name="l00476"></a>00476                     inner_iter(other.inner_iter)
-<a name="l00477"></a>00477                 {}
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479                 <span class="comment">// assignment</span>
-<a name="l00480"></a>00480                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00481"></a>00481                 segmented_iterator& operator=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) {
-<a name="l00482"></a>00482                     <span class="keywordflow">if</span>(<span class="keyword">this</span> != &other) {
-<a name="l00483"></a>00483                         my_segcont = other.my_segcont;
-<a name="l00484"></a>00484                         outer_iter = other.outer_iter;
-<a name="l00485"></a>00485                         <span class="keywordflow">if</span>(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;
-<a name="l00486"></a>00486                     }
-<a name="l00487"></a>00487                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00488"></a>00488                 }
-<a name="l00489"></a>00489 
-<a name="l00490"></a>00490                 <span class="comment">// allow assignment of outer iterator to segmented iterator.  Once it is</span>
-<a name="l00491"></a>00491                 <span class="comment">// assigned, move forward until a non-empty inner container is found or</span>
-<a name="l00492"></a>00492                 <span class="comment">// the end of the outer container is reached.</span>
-<a name="l00493"></a>00493                 segmented_iterator& operator=(<span class="keyword">const</span> outer_iterator& new_outer_iter) {
-<a name="l00494"></a>00494                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00495"></a>00495                     <span class="comment">// check that this iterator points to something inside the segmented container</span>
-<a name="l00496"></a>00496                     <span class="keywordflow">for</span>(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {
-<a name="l00497"></a>00497                         <span class="keywordflow">if</span>( !outer_iter->empty() ) {
-<a name="l00498"></a>00498                             inner_iter = outer_iter->begin();
-<a name="l00499"></a>00499                             <span class="keywordflow">break</span>;
-<a name="l00500"></a>00500                         }
-<a name="l00501"></a>00501                     }
-<a name="l00502"></a>00502                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00503"></a>00503                 }
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505                 <span class="comment">// pre-increment</span>
-<a name="l00506"></a>00506                 segmented_iterator& operator++() {
-<a name="l00507"></a>00507                     advance_me();
-<a name="l00508"></a>00508                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00509"></a>00509                 }
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511                 <span class="comment">// post-increment</span>
-<a name="l00512"></a>00512                 segmented_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00513"></a>00513                     segmented_iterator tmp = *<span class="keyword">this</span>;
-<a name="l00514"></a>00514                     operator++();
-<a name="l00515"></a>00515                     <span class="keywordflow">return</span> tmp;
-<a name="l00516"></a>00516                 }
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518                 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
-<a name="l00519"></a>00519                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00520"></a>00520                     <span class="keywordflow">return</span> (outer_iter == other_outer &&
-<a name="l00521"></a>00521                             (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));
-<a name="l00522"></a>00522                 }
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524                 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
-<a name="l00525"></a>00525                     <span class="keywordflow">return</span> !operator==(other_outer);
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527                 }
-<a name="l00528"></a>00528 
-<a name="l00529"></a>00529                 <span class="comment">// (i)* RHS</span>
-<a name="l00530"></a>00530                 reference operator*()<span class="keyword"> const </span>{
-<a name="l00531"></a>00531                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00532"></a>00532                     __TBB_ASSERT(outer_iter != my_segcont->end(), <span class="stringliteral">"Dereferencing a pointer at end of container"</span>);
-<a name="l00533"></a>00533                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// should never happen</span>
-<a name="l00534"></a>00534                     <span class="keywordflow">return</span> *inner_iter;
-<a name="l00535"></a>00535                 }
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537                 <span class="comment">// i-></span>
-<a name="l00538"></a>00538                 pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &operator*();}
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540             <span class="keyword">private</span>:
-<a name="l00541"></a>00541                 SegmentedContainer*             my_segcont;
-<a name="l00542"></a>00542                 outer_iterator outer_iter;
-<a name="l00543"></a>00543                 inner_iterator inner_iter;
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545                 <span class="keywordtype">void</span> advance_me() {
-<a name="l00546"></a>00546                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00547"></a>00547                     __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); <span class="comment">// not true if there are no inner containers</span>
-<a name="l00548"></a>00548                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// not true if the inner containers are all empty.</span>
-<a name="l00549"></a>00549                     ++inner_iter;
-<a name="l00550"></a>00550                     <span class="keywordflow">while</span>(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {
-<a name="l00551"></a>00551                         inner_iter = outer_iter->begin();
-<a name="l00552"></a>00552                     }
-<a name="l00553"></a>00553                 }
-<a name="l00554"></a>00554         };    <span class="comment">// segmented_iterator</span>
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556         <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="l00557"></a>00557         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
-<a name="l00558"></a>00558                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
-<a name="l00559"></a>00559             <span class="keywordflow">if</span>(i.my_segcont != j.my_segcont) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00560"></a>00560             <span class="keywordflow">if</span>(i.my_segcont == NULL) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00561"></a>00561             <span class="keywordflow">if</span>(i.outer_iter != j.outer_iter) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00562"></a>00562             <span class="keywordflow">if</span>(i.outer_iter == i.my_segcont->end()) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00563"></a>00563             <span class="keywordflow">return</span> i.inner_iter == j.inner_iter;
-<a name="l00564"></a>00564         }
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566         <span class="comment">// !=</span>
-<a name="l00567"></a>00567         <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="l00568"></a>00568         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
-<a name="l00569"></a>00569                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
-<a name="l00570"></a>00570             <span class="keywordflow">return</span> !(i==j);
-<a name="l00571"></a>00571         }
-<a name="l00572"></a>00572 
-<a name="l00573"></a>00573         <span class="comment">// storage for initialization function pointer</span>
-<a name="l00574"></a>00574         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00575"></a>00575         <span class="keyword">struct </span>callback_base {
-<a name="l00576"></a>00576             <span class="keyword">virtual</span> T apply( ) = 0;
-<a name="l00577"></a>00577             <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroy( ) = 0;
-<a name="l00578"></a>00578             <span class="comment">// need to be able to create copies of callback_base for copy constructor</span>
-<a name="l00579"></a>00579             <span class="keyword">virtual</span> callback_base* make_copy() = 0;
-<a name="l00580"></a>00580             <span class="comment">// need virtual destructor to satisfy GCC compiler warning</span>
-<a name="l00581"></a>00581             <span class="keyword">virtual</span> ~callback_base() { }
-<a name="l00582"></a>00582         };
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584         <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Functor>
-<a name="l00585"></a>00585         <span class="keyword">struct </span>callback_leaf : <span class="keyword">public</span> callback_base<T>, <span class="keyword">public</span> tbb::internal::no_copy {
-<a name="l00586"></a>00586             <span class="keyword">typedef</span> Functor my_callback_type;
-<a name="l00587"></a>00587             <span class="keyword">typedef</span> callback_leaf<T,Functor> my_type;
-<a name="l00588"></a>00588             <span class="keyword">typedef</span> my_type* callback_pointer;
-<a name="l00589"></a>00589             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00204.html">tbb::tbb_allocator<my_type></a> my_allocator_type;
-<a name="l00590"></a>00590             Functor f;
-<a name="l00591"></a>00591             callback_leaf( <span class="keyword">const</span> Functor& f_) : f(f_) {
-<a name="l00592"></a>00592             }
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594             <span class="keyword">static</span> callback_pointer new_callback(<span class="keyword">const</span> Functor& f_ ) {
-<a name="l00595"></a>00595                 <span class="keywordtype">void</span>* new_void = my_allocator_type().allocate(1);
-<a name="l00596"></a>00596                 callback_pointer new_cb = <span class="keyword">new</span> (new_void) callback_leaf<T,Functor>(f_); <span class="comment">// placement new</span>
-<a name="l00597"></a>00597                 <span class="keywordflow">return</span> new_cb;
-<a name="l00598"></a>00598             }
-<a name="l00599"></a>00599 
-<a name="l00600"></a>00600             <span class="comment">/* override */</span> callback_pointer make_copy() {
-<a name="l00601"></a>00601                 <span class="keywordflow">return</span> new_callback( f );
-<a name="l00602"></a>00602             }
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604              <span class="comment">/* override */</span> <span class="keywordtype">void</span> destroy( ) {
-<a name="l00605"></a>00605                  callback_pointer my_ptr = <span class="keyword">this</span>;
-<a name="l00606"></a>00606                  my_allocator_type().destroy(my_ptr);
-<a name="l00607"></a>00607                  my_allocator_type().deallocate(my_ptr,1);
-<a name="l00608"></a>00608              }
-<a name="l00609"></a>00609             <span class="comment">/* override */</span> T apply() { <span class="keywordflow">return</span> f(); }  <span class="comment">// does copy construction of returned value.</span>
-<a name="l00610"></a>00610         };
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612 
-<a name="l00614"></a>00614 
-<a name="l00619"></a>00619         <span class="keyword">template</span><<span class="keyword">typename</span> U, size_t ModularSize>
-<a name="l00620"></a>00620         <span class="keyword">struct </span>ets_element {
-<a name="l00621"></a>00621             <span class="keywordtype">char</span> value[<span class="keyword">sizeof</span>(U) + tbb::internal::NFS_MaxLineSize-ModularSize];
-<a name="l00622"></a>00622             <span class="keywordtype">void</span> unconstruct() {
-<a name="l00623"></a>00623                 <span class="comment">// "reinterpret_cast<U*>(&value)->~U();" causes type-punning warning with gcc 4.4,</span>
-<a name="l00624"></a>00624                 <span class="comment">// "U* u = reinterpret_cast<U*>(&value); u->~U();" causes unused variable warning with VS2010.</span>
-<a name="l00625"></a>00625                 <span class="comment">// Thus another "casting via union" hack.</span>
-<a name="l00626"></a>00626                 __TBB_ASSERT(<span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)==<span class="keyword">sizeof</span>(U*),NULL);
-<a name="l00627"></a>00627                 <span class="keyword">union </span>{ <span class="keywordtype">void</span>* space; U* val; } helper;
-<a name="l00628"></a>00628                 helper.space = &value;
-<a name="l00629"></a>00629                 helper.val->~U();
-<a name="l00630"></a>00630             }
-<a name="l00631"></a>00631         };
-<a name="l00632"></a>00632 
-<a name="l00634"></a>00634         <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00635"></a>00635         <span class="keyword">struct </span>ets_element<U,0> {
-<a name="l00636"></a>00636             <span class="keywordtype">char</span> value[<span class="keyword">sizeof</span>(U)];
-<a name="l00637"></a>00637             <span class="keywordtype">void</span> unconstruct() { <span class="comment">// Same implementation as in general case</span>
-<a name="l00638"></a>00638                 __TBB_ASSERT(<span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)==<span class="keyword">sizeof</span>(U*),NULL);
-<a name="l00639"></a>00639                 <span class="keyword">union </span>{ <span class="keywordtype">void</span>* space; U* val; } helper;
-<a name="l00640"></a>00640                 helper.space = &value;
-<a name="l00641"></a>00641                 helper.val->~U();
-<a name="l00642"></a>00642             }
-<a name="l00643"></a>00643         };
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645     } <span class="comment">// namespace internal</span>
-<a name="l00647"></a>00647 <span class="comment"></span>
-<a name="l00649"></a>00649 
-<a name="l00668"></a>00668     <span class="keyword">template</span> <<span class="keyword">typename</span> T, 
-<a name="l00669"></a>00669               <span class="keyword">typename</span> Allocator=cache_aligned_allocator<T>, 
-<a name="l00670"></a><a class="code" href="a00164.html">00670</a>               <a class="code" href="a00267.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key > 
-<a name="l00671"></a>00671     <span class="keyword">class </span><a class="code" href="a00164.html">enumerable_thread_specific</a>: internal::ets_base<ETS_key_type> { 
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673         <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="a00164.html">enumerable_thread_specific</a>;
-<a name="l00674"></a>00674     
-<a name="l00675"></a>00675         <span class="keyword">typedef</span> internal::ets_element<T,sizeof(T)%tbb::internal::NFS_MaxLineSize> padded_element;
-<a name="l00676"></a>00676 
-<a name="l00678"></a>00678         <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00679"></a>00679         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00148.html">blocked_range</a><I> {
-<a name="l00680"></a>00680         <span class="keyword">public</span>:
-<a name="l00681"></a>00681             <span class="keyword">typedef</span> T value_type;
-<a name="l00682"></a>00682             <span class="keyword">typedef</span> T& reference;
-<a name="l00683"></a>00683             <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00684"></a>00684             <span class="keyword">typedef</span> I iterator;
-<a name="l00685"></a>00685             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00686"></a>00686             generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00148.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
-<a name="l00687"></a>00687             template<typename U>
-<a name="l00688"></a>00688             generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00148.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
-<a name="l00689"></a>00689             generic_range_type( generic_range_type& r, <a class="code" href="a00198.html">split</a> ) : <a class="code" href="a00148.html">blocked_range<I></a>(r,<a class="code" href="a00198.html">split</a>()) {}
-<a name="l00690"></a>00690         };
-<a name="l00691"></a>00691     
-<a name="l00692"></a>00692         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< padded_element >::other padded_allocator_type;
-<a name="l00693"></a>00693         <span class="keyword">typedef</span> <a class="code" href="a00162.html">tbb::concurrent_vector< padded_element, padded_allocator_type ></a> <a class="code" href="a00162.html">internal_collection_type</a>;
-<a name="l00694"></a>00694         
-<a name="l00695"></a>00695         internal::callback_base<T> *my_finit_callback;
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697         <span class="comment">// need to use a pointed-to exemplar because T may not be assignable.</span>
-<a name="l00698"></a>00698         <span class="comment">// using tbb_allocator instead of padded_element_allocator because we may be</span>
-<a name="l00699"></a>00699         <span class="comment">// copying an exemplar from one instantiation of ETS to another with a different</span>
-<a name="l00700"></a>00700         <span class="comment">// allocator.</span>
-<a name="l00701"></a>00701         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00204.html">tbb::tbb_allocator<padded_element ></a> <a class="code" href="a00204.html">exemplar_allocator_type</a>;
-<a name="l00702"></a>00702         <span class="keyword">static</span> padded_element * create_exemplar(<span class="keyword">const</span> T& my_value) {
-<a name="l00703"></a>00703             padded_element *new_exemplar = reinterpret_cast<padded_element *>(exemplar_allocator_type().allocate(1));
-<a name="l00704"></a>00704             <span class="keyword">new</span>(new_exemplar->value) T(my_value);
-<a name="l00705"></a>00705             <span class="keywordflow">return</span> new_exemplar;
-<a name="l00706"></a>00706         }
-<a name="l00707"></a>00707 
-<a name="l00708"></a>00708         <span class="keyword">static</span> padded_element *create_exemplar( ) {
-<a name="l00709"></a>00709             padded_element *new_exemplar = reinterpret_cast<padded_element *>(exemplar_allocator_type().allocate(1));
-<a name="l00710"></a>00710             <span class="keyword">new</span>(new_exemplar->value) T( );
-<a name="l00711"></a>00711             <span class="keywordflow">return</span> new_exemplar;
-<a name="l00712"></a>00712         }
-<a name="l00713"></a>00713 
-<a name="l00714"></a>00714         <span class="keyword">static</span> <span class="keywordtype">void</span> free_exemplar(padded_element *my_ptr) {
-<a name="l00715"></a>00715             my_ptr->unconstruct();
-<a name="l00716"></a>00716             exemplar_allocator_type().destroy(my_ptr);
-<a name="l00717"></a>00717             exemplar_allocator_type().deallocate(my_ptr,1);
-<a name="l00718"></a>00718         }
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720         padded_element* my_exemplar_ptr;
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722         internal_collection_type my_locals;
-<a name="l00723"></a>00723    
-<a name="l00724"></a>00724         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_local() {
-<a name="l00725"></a>00725 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00726"></a>00726 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00162.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
-<a name="l00727"></a>00727 <span class="preprocessor">#else</span>
-<a name="l00728"></a>00728 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00162.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
-<a name="l00729"></a>00729 <span class="preprocessor">#endif</span>
-<a name="l00730"></a>00730 <span class="preprocessor"></span>            <span class="keywordflow">if</span>(my_finit_callback) {
-<a name="l00731"></a>00731                 <span class="keyword">new</span>(lref) T(my_finit_callback->apply());
-<a name="l00732"></a>00732             } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(my_exemplar_ptr) {
-<a name="l00733"></a>00733                 pointer t_exemp = reinterpret_cast<T *>(&(my_exemplar_ptr->value));
-<a name="l00734"></a>00734                 <span class="keyword">new</span>(lref) T(*t_exemp);
-<a name="l00735"></a>00735             } <span class="keywordflow">else</span> {
-<a name="l00736"></a>00736                 <span class="keyword">new</span>(lref) T();
-<a name="l00737"></a>00737             }
-<a name="l00738"></a>00738             <span class="keywordflow">return</span> lref;
-<a name="l00739"></a>00739         } 
-<a name="l00740"></a>00740 
-<a name="l00741"></a>00741         <span class="keywordtype">void</span> unconstruct_locals() {
-<a name="l00742"></a>00742             <span class="keywordflow">for</span>(<span class="keyword">typename</span> internal_collection_type::iterator cvi = my_locals.<a class="code" href="a00162.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(); cvi != my_locals.<a class="code" href="a00162.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(); ++cvi) {
-<a name="l00743"></a>00743                 cvi->unconstruct();
-<a name="l00744"></a>00744             }
-<a name="l00745"></a>00745         }
-<a name="l00746"></a>00746 
-<a name="l00747"></a>00747         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< uintptr_t >::other array_allocator_type;
-<a name="l00748"></a>00748 
-<a name="l00749"></a>00749         <span class="comment">// _size is in bytes</span>
-<a name="l00750"></a>00750         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_array(size_t _size) {
-<a name="l00751"></a>00751             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
-<a name="l00752"></a>00752             <span class="keywordflow">return</span> array_allocator_type().allocate(nelements);
-<a name="l00753"></a>00753         }
-<a name="l00754"></a>00754 
-<a name="l00755"></a>00755         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> free_array( <span class="keywordtype">void</span>* _ptr, size_t _size) {
-<a name="l00756"></a>00756             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
-<a name="l00757"></a>00757             array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);
-<a name="l00758"></a>00758         }
-<a name="l00759"></a>00759    
-<a name="l00760"></a>00760     <span class="keyword">public</span>:
-<a name="l00761"></a>00761     
-<a name="l00763"></a>00763         <span class="keyword">typedef</span> Allocator allocator_type;
-<a name="l00764"></a>00764         <span class="keyword">typedef</span> T value_type;
-<a name="l00765"></a>00765         <span class="keyword">typedef</span> T& reference;
-<a name="l00766"></a>00766         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00767"></a>00767         <span class="keyword">typedef</span> T* pointer;
-<a name="l00768"></a>00768         <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
-<a name="l00769"></a>00769         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type size_type;
-<a name="l00770"></a>00770         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::difference_type difference_type;
-<a name="l00771"></a>00771     
-<a name="l00772"></a>00772         <span class="comment">// Iterator types</span>
-<a name="l00773"></a>00773         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;
-<a name="l00774"></a>00774         <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="l00775"></a>00775 
-<a name="l00776"></a>00776         <span class="comment">// Parallel range types</span>
-<a name="l00777"></a>00777         <span class="keyword">typedef</span> generic_range_type< iterator > range_type;
-<a name="l00778"></a>00778         <span class="keyword">typedef</span> generic_range_type< const_iterator > const_range_type;
-<a name="l00779"></a>00779     
-<a name="l00781"></a>00781         <a class="code" href="a00164.html">enumerable_thread_specific</a>() : my_finit_callback(0) { 
-<a name="l00782"></a>00782             my_exemplar_ptr = 0;
-<a name="l00783"></a>00783         }
-<a name="l00784"></a>00784 
-<a name="l00786"></a>00786         <span class="comment">// Finit should be a function taking 0 parameters and returning a T</span>
-<a name="l00787"></a><a class="code" href="a00164.html#724ed4c846493da62b4efe032e16eb4a">00787</a>         <span class="keyword">template</span> <<span class="keyword">typename</span> Finit>
-<a name="l00788"></a>00788         <a class="code" href="a00164.html">enumerable_thread_specific</a>( Finit _finit )
-<a name="l00789"></a>00789         {
-<a name="l00790"></a>00790             my_finit_callback = internal::callback_leaf<T,Finit>::new_callback( _finit );
-<a name="l00791"></a>00791             my_exemplar_ptr = 0; <span class="comment">// don't need exemplar if function is provided</span>
-<a name="l00792"></a>00792         }
-<a name="l00793"></a>00793     
-<a name="l00795"></a>00795         <a class="code" href="a00164.html">enumerable_thread_specific</a>(<span class="keyword">const</span> T &_exemplar) : my_finit_callback(0) {
-<a name="l00796"></a>00796             my_exemplar_ptr = create_exemplar(_exemplar);
-<a name="l00797"></a>00797         }
-<a name="l00798"></a>00798     
-<a name="l00800"></a>00800         ~<a class="code" href="a00164.html">enumerable_thread_specific</a>() { 
-<a name="l00801"></a>00801             <span class="keywordflow">if</span>(my_finit_callback) {
-<a name="l00802"></a>00802                 my_finit_callback->destroy();
-<a name="l00803"></a>00803             }
-<a name="l00804"></a>00804             <span class="keywordflow">if</span>(my_exemplar_ptr) {
-<a name="l00805"></a>00805                 free_exemplar(my_exemplar_ptr);
-<a name="l00806"></a>00806             }
-<a name="l00807"></a>00807             this->clear();  <span class="comment">// deallocation before the derived class is finished destructing</span>
-<a name="l00808"></a>00808             <span class="comment">// So free(array *) is still accessible</span>
-<a name="l00809"></a>00809         }
-<a name="l00810"></a>00810       
-<a name="l00812"></a>00812         reference local() {
-<a name="l00813"></a>00813             <span class="keywordtype">bool</span> exists;
-<a name="l00814"></a>00814             <span class="keywordflow">return</span> local(exists);
-<a name="l00815"></a>00815         }
-<a name="l00816"></a>00816 
-<a name="l00818"></a>00818         reference local(<span class="keywordtype">bool</span>& exists)  {
-<a name="l00819"></a>00819             __TBB_ASSERT(ETS_key_type==ets_no_key,<span class="stringliteral">"ets_key_per_instance not yet implemented"</span>); 
-<a name="l00820"></a>00820             <span class="keywordtype">void</span>* ptr = this->table_lookup(exists);
-<a name="l00821"></a>00821             <span class="keywordflow">return</span> *(T*)ptr;
-<a name="l00822"></a>00822         }
-<a name="l00823"></a>00823 
-<a name="l00825"></a>00825         size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
-<a name="l00826"></a>00826     
-<a name="l00828"></a>00828         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00162.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
-<a name="l00829"></a>00829     
-<a name="l00831"></a>00831         iterator begin() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
-<a name="l00833"></a>00833         iterator end() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
-<a name="l00834"></a>00834     
-<a name="l00836"></a>00836         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
-<a name="l00837"></a>00837     
-<a name="l00839"></a>00839         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
-<a name="l00840"></a>00840 
-<a name="l00842"></a>00842         range_type range( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( begin(), end(), grainsize ); } 
-<a name="l00843"></a>00843         
-<a name="l00845"></a>00845         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="l00846"></a>00846 
-<a name="l00848"></a>00848         <span class="keywordtype">void</span> clear() {
-<a name="l00849"></a>00849             unconstruct_locals();
-<a name="l00850"></a>00850             my_locals.<a class="code" href="a00162.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
-<a name="l00851"></a>00851             this->table_clear();
-<a name="l00852"></a>00852             <span class="comment">// callback is not destroyed</span>
-<a name="l00853"></a>00853             <span class="comment">// exemplar is not destroyed</span>
-<a name="l00854"></a>00854         }
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856     <span class="keyword">private</span>:
-<a name="l00857"></a>00857 
-<a name="l00858"></a>00858         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00859"></a>00859         <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other);
-<a name="l00860"></a>00860 
-<a name="l00861"></a>00861     <span class="keyword">public</span>:
-<a name="l00862"></a>00862 
-<a name="l00863"></a>00863         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00864"></a>00864         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other ) : internal::ets_base<ETS_key_type> ()
-<a name="l00865"></a>00865         {
-<a name="l00866"></a>00866             internal_copy(other);
-<a name="l00867"></a>00867         }
-<a name="l00868"></a>00868 
-<a name="l00869"></a>00869         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific& other ) : internal::ets_base<ETS_key_type> ()
-<a name="l00870"></a>00870         {
-<a name="l00871"></a>00871             internal_copy(other);
-<a name="l00872"></a>00872         }
-<a name="l00873"></a>00873 
-<a name="l00874"></a>00874     <span class="keyword">private</span>:
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00877"></a>00877         enumerable_thread_specific &
-<a name="l00878"></a>00878         internal_assign(<span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
-<a name="l00879"></a>00879             <span class="keywordflow">if</span>(static_cast<void *>( <span class="keyword">this</span> ) != static_cast<const void *>( &other )) {
-<a name="l00880"></a>00880                 this->clear(); 
-<a name="l00881"></a>00881                 <span class="keywordflow">if</span>(my_finit_callback) {
-<a name="l00882"></a>00882                     my_finit_callback->destroy();
-<a name="l00883"></a>00883                     my_finit_callback = 0;
-<a name="l00884"></a>00884                 }
-<a name="l00885"></a>00885                 <span class="keywordflow">if</span>(my_exemplar_ptr) {
-<a name="l00886"></a>00886                     free_exemplar(my_exemplar_ptr);
-<a name="l00887"></a>00887                     my_exemplar_ptr = 0;
-<a name="l00888"></a>00888                 }
-<a name="l00889"></a>00889                 internal_copy( other );
-<a name="l00890"></a>00890             }
-<a name="l00891"></a>00891             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00892"></a>00892         }
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894     <span class="keyword">public</span>:
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896         <span class="comment">// assignment</span>
-<a name="l00897"></a>00897         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific& other) {
-<a name="l00898"></a>00898             <span class="keywordflow">return</span> internal_assign(other);
-<a name="l00899"></a>00899         }
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00902"></a>00902         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other)
-<a name="l00903"></a>00903         {
-<a name="l00904"></a>00904             <span class="keywordflow">return</span> internal_assign(other);
-<a name="l00905"></a>00905         }
-<a name="l00906"></a>00906 
-<a name="l00907"></a>00907         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
-<a name="l00908"></a>00908         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00909"></a>00909         T combine(combine_func_t f_combine) {
-<a name="l00910"></a>00910             <span class="keywordflow">if</span>(begin() == end()) {
-<a name="l00911"></a>00911                 <span class="keywordflow">if</span>(my_finit_callback) {
-<a name="l00912"></a>00912                     <span class="keywordflow">return</span> my_finit_callback->apply();
-<a name="l00913"></a>00913                 }
-<a name="l00914"></a>00914                 pointer local_ref = reinterpret_cast<T*>((my_exemplar_ptr->value));
-<a name="l00915"></a>00915                 <span class="keywordflow">return</span> T(*local_ref);
-<a name="l00916"></a>00916             }
-<a name="l00917"></a>00917             const_iterator ci = begin();
-<a name="l00918"></a>00918             T my_result = *ci;
-<a name="l00919"></a>00919             <span class="keywordflow">while</span>(++ci != end()) 
-<a name="l00920"></a>00920                 my_result = f_combine( my_result, *ci );
-<a name="l00921"></a>00921             <span class="keywordflow">return</span> my_result;
-<a name="l00922"></a>00922         }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
-<a name="l00925"></a>00925         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00926"></a>00926         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) {
-<a name="l00927"></a>00927             <span class="keywordflow">for</span>(const_iterator ci = begin(); ci != end(); ++ci) {
-<a name="l00928"></a>00928                 f_combine( *ci );
-<a name="l00929"></a>00929             }
-<a name="l00930"></a>00930         }
-<a name="l00931"></a>00931 
-<a name="l00932"></a>00932     }; <span class="comment">// enumerable_thread_specific</span>
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934     
-<a name="l00935"></a>00935     <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="l00936"></a>00936     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00937"></a>00937     <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="l00938"></a>00938         <span class="keyword">typedef</span> internal::ets_base<ets_no_key> base;
-<a name="l00939"></a>00939         __TBB_ASSERT(my_locals.<a class="code" href="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()==0,NULL);
-<a name="l00940"></a>00940         this->table_reserve_for_copy( other );
-<a name="l00941"></a>00941         <span class="keywordflow">for</span>( base::array* r=other.my_root; r; r=r->next ) {
-<a name="l00942"></a>00942             <span class="keywordflow">for</span>( size_t i=0; i<r-><a class="code" href="a00148.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>(); ++i ) {
-<a name="l00943"></a>00943                 base::slot& s1 = r->at(i);
-<a name="l00944"></a>00944                 <span class="keywordflow">if</span>( !s1.empty() ) {
-<a name="l00945"></a>00945                     base::slot& s2 = this->table_find(s1.key);
-<a name="l00946"></a>00946                     <span class="keywordflow">if</span>( s2.empty() ) { 
-<a name="l00947"></a>00947 #<span class="keywordflow">if</span> TBB_DEPRECATED
-<a name="l00948"></a>00948                         <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00162.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
-<a name="l00949"></a>00949 <span class="preprocessor">#else</span>
-<a name="l00950"></a>00950 <span class="preprocessor"></span>                        <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00162.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
-<a name="l00951"></a>00951 <span class="preprocessor">#endif</span>
-<a name="l00952"></a>00952 <span class="preprocessor"></span>                        s2.ptr = <span class="keyword">new</span>(lref) T(*(U*)s1.ptr);
-<a name="l00953"></a>00953                         s2.key = s1.key;
-<a name="l00954"></a>00954                     } <span class="keywordflow">else</span> {
-<a name="l00955"></a>00955                         <span class="comment">// Skip the duplicate</span>
-<a name="l00956"></a>00956                     } 
-<a name="l00957"></a>00957                 }
-<a name="l00958"></a>00958             }
-<a name="l00959"></a>00959         }
-<a name="l00960"></a>00960         <span class="keywordflow">if</span>(other.my_finit_callback) {
-<a name="l00961"></a>00961             my_finit_callback = other.my_finit_callback->make_copy();
-<a name="l00962"></a>00962         } <span class="keywordflow">else</span> {
-<a name="l00963"></a>00963             my_finit_callback = 0;
-<a name="l00964"></a>00964         }
-<a name="l00965"></a>00965         <span class="keywordflow">if</span>(other.my_exemplar_ptr) {
-<a name="l00966"></a>00966             pointer local_ref = reinterpret_cast<U*>(other.my_exemplar_ptr->value);
-<a name="l00967"></a>00967             my_exemplar_ptr = create_exemplar(*local_ref);
-<a name="l00968"></a>00968         } <span class="keywordflow">else</span> {
-<a name="l00969"></a>00969             my_exemplar_ptr = 0;
-<a name="l00970"></a>00970         }
-<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     <span class="keyword">class </span>flattened2d {
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976         <span class="comment">// This intermediate typedef is to address issues with VC7.1 compilers</span>
-<a name="l00977"></a>00977         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::value_type conval_type;
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979     <span class="keyword">public</span>:
-<a name="l00980"></a>00980 
-<a name="l00982"></a>00982         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::size_type size_type;
-<a name="l00983"></a>00983         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::difference_type difference_type;
-<a name="l00984"></a>00984         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::allocator_type allocator_type;
-<a name="l00985"></a>00985         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::value_type value_type;
-<a name="l00986"></a>00986         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::reference reference;
-<a name="l00987"></a>00987         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_reference const_reference;
-<a name="l00988"></a>00988         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::pointer pointer;
-<a name="l00989"></a>00989         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_pointer const_pointer;
-<a name="l00990"></a>00990 
-<a name="l00991"></a>00991         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, value_type> iterator;
-<a name="l00992"></a>00992         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, const value_type> const_iterator;
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994         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="l00995"></a>00995             my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
-<a name="l00996"></a>00996 
-<a name="l00997"></a>00997         flattened2d( <span class="keyword">const</span> Container &c ) : 
-<a name="l00998"></a>00998             my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000         iterator begin() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
-<a name="l01001"></a>01001         iterator end() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
-<a name="l01002"></a>01002         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
-<a name="l01003"></a>01003         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
-<a name="l01004"></a>01004 
-<a name="l01005"></a>01005         size_type size()<span class="keyword"> const </span>{
-<a name="l01006"></a>01006             size_type tot_size = 0;
-<a name="l01007"></a>01007             <span class="keywordflow">for</span>(<span class="keyword">typename</span> Container::const_iterator i = my_begin; i != my_end; ++i) {
-<a name="l01008"></a>01008                 tot_size += i->size();
-<a name="l01009"></a>01009             }
-<a name="l01010"></a>01010             <span class="keywordflow">return</span> tot_size;
-<a name="l01011"></a>01011         }
-<a name="l01012"></a>01012 
-<a name="l01013"></a>01013     <span class="keyword">private</span>:
-<a name="l01014"></a>01014 
-<a name="l01015"></a>01015         Container *my_container;
-<a name="l01016"></a>01016         <span class="keyword">typename</span> Container::const_iterator my_begin;
-<a name="l01017"></a>01017         <span class="keyword">typename</span> Container::const_iterator my_end;
-<a name="l01018"></a>01018 
-<a name="l01019"></a>01019     };
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021     <span class="keyword">template</span> <<span class="keyword">typename</span> Container>
-<a name="l01022"></a>01022     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="l01023"></a>01023         <span class="keywordflow">return</span> flattened2d<Container>(c, b, e);
-<a name="l01024"></a>01024     }
-<a name="l01025"></a>01025 
-<a name="l01026"></a>01026     <span class="keyword">template</span> <<span class="keyword">typename</span> Container>
-<a name="l01027"></a>01027     flattened2d<Container> flatten2d(<span class="keyword">const</span> Container &c) {
-<a name="l01028"></a>01028         <span class="keywordflow">return</span> flattened2d<Container>(c);
-<a name="l01029"></a>01029     }
-<a name="l01030"></a>01030 
-<a name="l01031"></a>01031 } <span class="comment">// interface5</span>
-<a name="l01032"></a>01032 
-<a name="l01033"></a>01033 <span class="keyword">namespace </span>internal {
-<a name="l01034"></a>01034 <span class="keyword">using</span> interface5::internal::segmented_iterator;
-<a name="l01035"></a>01035 }
-<a name="l01036"></a>01036 
-<a name="l01037"></a>01037 <span class="keyword">using</span> interface5::enumerable_thread_specific;
-<a name="l01038"></a>01038 <span class="keyword">using</span> interface5::flattened2d;
-<a name="l01039"></a>01039 <span class="keyword">using</span> interface5::flatten2d;
-<a name="l01040"></a>01040 
-<a name="l01041"></a>01041 } <span class="comment">// namespace tbb</span>
-<a name="l01042"></a>01042 
-<a name="l01043"></a>01043 <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/a00354.html b/doc/html/a00354.html
new file mode 100644
index 0000000..7d4ccc5
--- /dev/null
+++ b/doc/html/a00354.html
@@ -0,0 +1,970 @@
+<!DOCTYPE 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/a00367.html
similarity index 98%
rename from doc/html/a00362.html
rename to doc/html/a00367.html
index b13baca..66a3ff4 100644
--- a/doc/html/a00362.html
+++ b/doc/html/a00367.html
@@ -157,8 +157,8 @@
 <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="a00142.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00156"></a>00156         <span class="keyword">new</span>(tmp.<a class="code" href="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00173.html">scoped_lock</a>(*<span class="keyword">this</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);
@@ -171,8 +171,8 @@
 <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="a00142.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="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<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>
@@ -186,8 +186,8 @@
 <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="a00142.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="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<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>
diff --git a/doc/html/a00364.html b/doc/html/a00369.html
similarity index 100%
rename from doc/html/a00364.html
rename to doc/html/a00369.html
diff --git a/doc/html/a00365.html b/doc/html/a00370.html
similarity index 100%
rename from doc/html/a00365.html
rename to doc/html/a00370.html
diff --git a/doc/html/a00366.html b/doc/html/a00371.html
similarity index 99%
rename from doc/html/a00366.html
rename to doc/html/a00371.html
index d809dc8..e5833ed 100644
--- a/doc/html/a00366.html
+++ b/doc/html/a00371.html
@@ -440,7 +440,7 @@
 <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="a00274.html#g3383e2703977012b6f384d673410f1f7">00470</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& 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>;
@@ -457,7 +457,7 @@
 <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="a00274.html#g2617dc9b88b3285a7212599d49f74228">00488</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00274.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="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>;
diff --git a/doc/html/a00375.html b/doc/html/a00380.html
similarity index 90%
rename from doc/html/a00375.html
rename to doc/html/a00380.html
index bde914e..c9b8394 100644
--- a/doc/html/a00375.html
+++ b/doc/html/a00380.html
@@ -124,44 +124,44 @@
 <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="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">00123</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& 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="a00274.html#g13cac5dd55c7533bccea43a51c33d0e5">00130</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="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="a00274.html#ga7ac75d532389b55b9247f3fdb0b00d1">00137</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="a00146.html">auto_partitioner</a>& partitioner ) {
+<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="a00274.html#g9cd1b210ceb1c040f30e390b4a21bde8">00144</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00141.html">affinity_partitioner</a>& partitioner ) {
+<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="a00274.html#g2d317a5e0078cd193125439fed60dfdc">00152</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00274.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="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="a00274.html#g1c0700e3f85e83a788ff3ede88ebb7e9">00159</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="a00146.html">auto_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context< [...]
+<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="a00274.html#g04b4696b67370c01353ff5974c8f1196">00166</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00141.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
+<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>
@@ -177,8 +177,8 @@
 <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="a00148.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="a00148.html#18d2258400756ac1446dac7676b18df3">begin</a>(),  k = my_begin + i * my_step; i < r.<a class="code" href="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>(); i++, k = k + my_step)
+<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 };
@@ -188,37 +188,37 @@
 <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="a00273.html#15c764c70c8a32e7a4b8c291d0cc8dde">00197</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f) {
+<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="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, step, f, 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="a00274.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="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="a00148.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), 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="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00146.html">tbb::auto_partitioner</a>(), context);
+<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="a00273.html#490399525b1e690ec31d6db964c6b272">00216</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f) {
+<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="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, 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="a00274.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="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
+<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="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">strict_ppl::parallel_for</a>;
+<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 
diff --git a/doc/html/a00379.html b/doc/html/a00384.html
similarity index 94%
rename from doc/html/a00379.html
rename to doc/html/a00384.html
index 9d7e93e..5d7a145 100644
--- a/doc/html/a00379.html
+++ b/doc/html/a00384.html
@@ -64,17 +64,17 @@
 <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="a00274.html#gcd40c32f319747e61a8f73fcfc452001">00051</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="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="a00274.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
+<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="a00274.html#gc2d710ca573f0a9bd94379cba3772def">00059</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f) {
+<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="a00274.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body);
+<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 
diff --git a/doc/html/a00381.html b/doc/html/a00386.html
similarity index 96%
rename from doc/html/a00381.html
rename to doc/html/a00386.html
index 04f0a6b..0b95e43 100644
--- a/doc/html/a00381.html
+++ b/doc/html/a00386.html
@@ -163,7 +163,7 @@
 <a name="l00148"></a>00148 <span class="comment">// parallel_invoke with user-defined context</span>
 <a name="l00149"></a>00149 <span class="comment">// two arguments</span>
 <a name="l00150"></a>00150 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1 >
-<a name="l00151"></a><a class="code" href="a00274.html#gd3e2998f171494f94c2103f4eb924084">00151</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="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 
@@ -174,7 +174,7 @@
 <a name="l00159"></a>00159 
 <a name="l00160"></a>00160 <span class="comment">// three arguments</span>
 <a name="l00161"></a>00161 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1, <span class="keyword">typename</span> F2 >
-<a name="l00162"></a>00162 <span class="keywordtype">void</span> <a class="code" href="a00274.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="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 
@@ -186,7 +186,7 @@
 <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="a00274.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="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);
@@ -201,7 +201,7 @@
 <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="a00274.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="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);
@@ -215,7 +215,7 @@
 <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="a00274.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="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);
@@ -229,7 +229,7 @@
 <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="a00274.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="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 {
@@ -245,7 +245,7 @@
 <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="a00274.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="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 {
@@ -262,7 +262,7 @@
 <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="a00274.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="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 {
@@ -279,7 +279,7 @@
 <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="a00274.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="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 {
@@ -295,37 +295,37 @@
 <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="a00274.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& 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="a00274.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="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="a00274.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="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="a00274.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="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="a00274.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="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="a00274.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="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;
@@ -334,7 +334,7 @@
 <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="a00274.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="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;
@@ -343,7 +343,7 @@
 <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="a00274.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="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;
@@ -352,7 +352,7 @@
 <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="a00274.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="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;
diff --git a/doc/html/a00391.html b/doc/html/a00391.html
deleted file mode 100644
index c3e097b..0000000
--- a/doc/html/a00391.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="a00167.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00167.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="a00142.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="a00274.html#ged143f31dd3d96ded02ab3db915b91c7">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="a00274.html#gc9fac8870b2e6365fb337014404529df">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="a00274.html#g62fde400a37bbca1a2fddc8e3d22f556">00335</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00146.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/a00387.html b/doc/html/a00392.html
similarity index 93%
rename from doc/html/a00387.html
rename to doc/html/a00392.html
index 224031e..3ba930e 100644
--- a/doc/html/a00387.html
+++ b/doc/html/a00392.html
@@ -230,44 +230,44 @@
 <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="a00274.html#g1b3d59c5eb62683c5754db6970392fa3">00246</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& 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="a00274.html#gec1b7c03f9da909bef5db12e3d41bed3">00253</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="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="a00274.html#g18a19157e6245992fc00ca0adeb7dd37">00260</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00146.html">auto_partitioner</a>& partitioner ) {
+<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="a00274.html#gc61e73fcc36c92d79a217fc355ff4a6b">00267</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00141.html">affinity_partitioner</a>& partitioner ) {
+<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="a00274.html#g45cb00c42a18e334bbde8b7535afe460">00275</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00274.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="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="a00274.html#g1c1ea1d7c61b3c225e92c70d669a53a5">00282</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00146.html">auto_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
+<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="a00274.html#gd9ac3a3811060314695f33b703c6e11b">00289</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00141.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
+<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>
@@ -275,7 +275,7 @@
 <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="a00274.html#gc9412e09fb01fcad8c018ea9cffb28ef">00300</a> Value <a class="code" href="a00274.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><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() );
@@ -284,7 +284,7 @@
 <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="a00274.html#gaddffeec0e892ac3d6fc7fc2053e1eca">00310</a> Value <a class="code" href="a00274.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="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>>
@@ -294,20 +294,20 @@
 <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="a00274.html#gb175401f0729e40dd2c5860a17c14385">00321</a> Value <a class="code" href="a00274.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="a00146.html">auto_partitioner</a>& partitioner ) {
+<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="a00146.html">auto_partitioner</a>>
+<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="a00274.html#gb7f1f1828ae2b330ce05b8513a495154">00332</a> Value <a class="code" href="a00274.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="a00141.html">affinity_partitioner</a>& partitioner ) {
+<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="a00141.html">affinity_partitioner</a>>
+<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 }
@@ -315,7 +315,7 @@
 <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="a00274.html#gfbc0cc2026d87f11a96bcd62788f5bb5">00344</a> <span class="preprocessor"></span>Value <a class="code" href="a00274.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="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>>
@@ -325,20 +325,20 @@
 <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="a00274.html#g630c90a399937d9d4ae70ff883186dfd">00355</a> Value <a class="code" href="a00274.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="a00146.html">auto_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
+<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="a00146.html">auto_partitioner</a>>
+<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="a00274.html#g496bd7eadb3b97495ccb5655ef90319e">00366</a> Value <a class="code" href="a00274.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="a00141.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00201.html">task_group_context</a>& context ) {
+<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="a00141.html">affinity_partitioner</a>>
+<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 }
diff --git a/doc/html/a00396.html b/doc/html/a00396.html
index 44a10c9..dbb49ca 100644
--- a/doc/html/a00396.html
+++ b/doc/html/a00396.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_sort.h Source File</title>
+<title>parallel_scan.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,181 +39,297 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_sort_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_sort_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_parallel_scan_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_scan_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "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="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="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="a00274.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="a00274.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="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00274.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="a00274.html#g16c3eb77d0e530834c51ce3857f01012">00203</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
-<a name="l00204"></a>00204     <a class="code" href="a00274.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="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 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00210"></a><a class="code" href="a00274.html#gc7576f82fdedc8a701a6c17ad9415926">00210</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
-<a name="l00211"></a>00211     <a class="code" href="a00274.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>
+<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.
diff --git a/doc/html/a00396.html b/doc/html/a00401.html
similarity index 96%
copy from doc/html/a00396.html
copy to doc/html/a00401.html
index 44a10c9..e3a1547 100644
--- a/doc/html/a00396.html
+++ b/doc/html/a00401.html
@@ -169,14 +169,14 @@
 <a name="l00155"></a>00155         }
 <a name="l00156"></a>00156     }
 <a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <a class="code" href="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( blocked_range<RandomAccessIterator>(k+1, end),
+<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="a00274.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
+<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 }
@@ -186,7 +186,7 @@
 <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="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) { 
+<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) { 
@@ -199,14 +199,14 @@
 <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="a00274.html#g16c3eb77d0e530834c51ce3857f01012">00203</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
-<a name="l00204"></a>00204     <a class="code" href="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
+<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="a00274.html#gc7576f82fdedc8a701a6c17ad9415926">00210</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
-<a name="l00211"></a>00211     <a class="code" href="a00274.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< 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 
diff --git a/doc/html/a00404.html b/doc/html/a00404.html
deleted file mode 100644
index 42de38c..0000000
--- a/doc/html/a00404.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<!DOCTYPE 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-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_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="a00141.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="a00146.html">00097</a> <span class="keyword">class </span><a class="code" href="a00146.html">auto_partitioner</a> {
-<a name="l00098"></a>00098 <span class="keyword">public</span>:
-<a name="l00099"></a>00099     <a class="code" href="a00146.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="a00146.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="a00141.html">00123</a> <span class="keyword">class </span><a class="code" href="a00141.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="a00141.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="a00141.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>
-</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/a00400.html b/doc/html/a00405.html
similarity index 98%
rename from doc/html/a00400.html
rename to doc/html/a00405.html
index 5e622c9..50cf87f 100644
--- a/doc/html/a00400.html
+++ b/doc/html/a00405.html
@@ -156,14 +156,14 @@
 <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="a00163.html">empty_task</a>* my_barrier;
+<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="a00163.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="a00163.html">empty_task</a>();
+<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);
diff --git a/doc/html/a00409.html b/doc/html/a00409.html
index 7e1fb73..f1f8284 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>pipeline.h Source File</title>
+<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>
@@ -19,7 +19,7 @@
     <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>
+<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>
 <a name="l00003"></a>00003 <span class="comment"></span>
 <a name="l00004"></a>00004 <span class="comment">    The source code contained or described herein and all documents related</span>
@@ -39,447 +39,188 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_pipeline_H </span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_pipeline_H </span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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 "atomic.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "task.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <cstddef></span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keyword">class </span>pipeline;
-<a name="l00031"></a>00031 <span class="keyword">class </span>filter;
+<a name="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 <span class="keyword">namespace </span>internal {
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">// The argument for PIPELINE_VERSION should be an integer between 2 and 9</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)<<1</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Token;
-<a name="l00040"></a>00040 <span class="keyword">typedef</span> <span class="keywordtype">long</span> tokendiff_t;
-<a name="l00041"></a>00041 <span class="keyword">class </span>stage_task;
-<a name="l00042"></a>00042 <span class="keyword">class </span>input_buffer;
-<a name="l00043"></a>00043 <span class="keyword">class </span>pipeline_root_task;
-<a name="l00044"></a>00044 <span class="keyword">class </span>pipeline_cleaner;
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 } <span class="comment">// namespace internal</span>
+<a name="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="keyword">namespace </span>interface5 {
-<a name="l00049"></a>00049     <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="l00050"></a>00050 
-<a name="l00051"></a>00051     <span class="keyword">namespace </span>internal {
-<a name="l00052"></a>00052         <span class="keyword">class </span>pipeline_proxy;
-<a name="l00053"></a>00053     }
-<a name="l00054"></a>00054 }
-<a name="l00055"></a>00055 
-<a name="l00057"></a>00057 
-<a name="l00059"></a>00059 
-<a name="l00060"></a><a class="code" href="a00165.html">00060</a> <span class="keyword">class </span><a class="code" href="a00165.html">filter</a>: internal::no_copy {
-<a name="l00061"></a>00061 <span class="keyword">private</span>:
-<a name="l00063"></a>00063     <span class="keyword">static</span> <a class="code" href="a00165.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(intptr_t(-1));}
-<a name="l00064"></a>00064     
-<a name="l00066"></a>00066     <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="l00067"></a>00067 
-<a name="l00069"></a>00069 
-<a name="l00071"></a>00071     <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="l00072"></a>00072 
-<a name="l00074"></a>00074     <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="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>00077     <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="l00078"></a>00078 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span>            0x0;
-<a name="l00080"></a>00080 <span class="preprocessor">#else</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span>            0x1<<7;
-<a name="l00082"></a>00082 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084     <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="l00085"></a>00085     <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="l00086"></a>00086 <span class="keyword">public</span>:
-<a name="l00087"></a>00087     <span class="keyword">enum</span> mode {
-<a name="l00089"></a>00089         parallel = current_version | filter_is_out_of_order, 
-<a name="l00091"></a>00091         serial_in_order = current_version | filter_is_serial,
-<a name="l00093"></a>00093         serial_out_of_order = current_version | filter_is_serial | filter_is_out_of_order,
-<a name="l00095"></a>00095         serial = serial_in_order
-<a name="l00096"></a>00096     };
-<a name="l00097"></a>00097 <span class="keyword">protected</span>:
-<a name="l00098"></a>00098     <a class="code" href="a00165.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) : 
-<a name="l00099"></a>00099         next_filter_in_pipeline(not_in_pipeline()),
-<a name="l00100"></a>00100         my_input_buffer(NULL),
-<a name="l00101"></a>00101         my_filter_mode(static_cast<unsigned char>((is_serial_ ? serial : parallel) | exact_exception_propagation)),
-<a name="l00102"></a>00102         prev_filter_in_pipeline(not_in_pipeline()),
-<a name="l00103"></a>00103         my_pipeline(NULL),
-<a name="l00104"></a>00104         next_segment(NULL)
-<a name="l00105"></a>00105     {}
-<a name="l00106"></a>00106     
-<a name="l00107"></a>00107     <a class="code" href="a00165.html">filter</a>( mode filter_mode ) :
-<a name="l00108"></a>00108         next_filter_in_pipeline(not_in_pipeline()),
-<a name="l00109"></a>00109         my_input_buffer(NULL),
-<a name="l00110"></a>00110         my_filter_mode(static_cast<unsigned char>(filter_mode | exact_exception_propagation)),
-<a name="l00111"></a>00111         prev_filter_in_pipeline(not_in_pipeline()),
-<a name="l00112"></a>00112         my_pipeline(NULL),
-<a name="l00113"></a>00113         next_segment(NULL)
-<a name="l00114"></a>00114     {}
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="keyword">public</span>:
-<a name="l00118"></a><a class="code" href="a00165.html#fcfec27656a69ff2072802ac001e936f">00118</a>     <span class="keywordtype">bool</span> <a class="code" href="a00165.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>()<span class="keyword"> const </span>{
-<a name="l00119"></a>00119         <span class="keywordflow">return</span> bool( my_filter_mode & filter_is_serial );
-<a name="l00120"></a>00120     }  
-<a name="l00121"></a>00121     
-<a name="l00123"></a><a class="code" href="a00165.html#cd53206c4795ef2df5df26b795caf692">00123</a>     <span class="keywordtype">bool</span> <a class="code" href="a00165.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>()<span class="keyword"> const </span>{
-<a name="l00124"></a>00124         <span class="keywordflow">return</span> (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
-<a name="l00125"></a>00125     }
+<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="l00128"></a><a class="code" href="a00165.html#15c29cae5d237e6d63dbfe5c94af89d5">00128</a>     <span class="keywordtype">bool</span> <a class="code" href="a00165.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>()<span class="keyword"> const </span>{
-<a name="l00129"></a>00129         <span class="keywordflow">return</span> ( my_filter_mode & filter_is_bound )==filter_is_bound;
-<a name="l00130"></a>00130     }
-<a name="l00131"></a>00131 
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="a00165.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>( <span class="keywordtype">void</span>* item ) = 0;
-<a name="l00135"></a>00135 
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00165.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>();
+<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="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00142"></a>00142 <span class="preprocessor"></span>
-<a name="l00144"></a><a class="code" href="a00165.html#56275eb889c77c4807967133e21401bd">00144</a> <span class="preprocessor">    virtual void finalize( void* </span><span class="comment">/*item*/</span> ) {};
-<a name="l00145"></a>00145 <span class="preprocessor">#endif</span>
-<a name="l00146"></a>00146 <span class="preprocessor"></span>
-<a name="l00147"></a>00147 <span class="keyword">private</span>:
-<a name="l00149"></a>00149     <a class="code" href="a00165.html">filter</a>* next_filter_in_pipeline;
-<a name="l00150"></a>00150 
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     internal::input_buffer* my_input_buffer;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-<a name="l00156"></a>00156     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00157"></a>00157     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00180.html">pipeline</a>;
-<a name="l00158"></a>00158     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00209.html">thread_bound_filter</a>;
-<a name="l00159"></a>00159 
-<a name="l00161"></a>00161     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
-<a name="l00162"></a>00162 
-<a name="l00164"></a>00164     <a class="code" href="a00165.html">filter</a>* prev_filter_in_pipeline;
-<a name="l00165"></a>00165 
-<a name="l00167"></a>00167     <a class="code" href="a00180.html">pipeline</a>* my_pipeline;
+<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="l00170"></a>00170 
-<a name="l00171"></a>00171     <a class="code" href="a00165.html">filter</a>* next_segment;
-<a name="l00172"></a>00172 };
-<a name="l00173"></a>00173 
-<a name="l00175"></a>00175 
-<a name="l00176"></a><a class="code" href="a00209.html">00176</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="a00165.html">filter</a> {
-<a name="l00177"></a>00177 <span class="keyword">public</span>:
-<a name="l00178"></a>00178     <span class="keyword">enum</span> result_type {
-<a name="l00179"></a>00179         <span class="comment">// item was processed</span>
-<a name="l00180"></a>00180         success,
-<a name="l00181"></a>00181         <span class="comment">// item is currently not available</span>
-<a name="l00182"></a>00182         item_not_available,
-<a name="l00183"></a>00183         <span class="comment">// there are no more items to process</span>
-<a name="l00184"></a>00184         end_of_stream
-<a name="l00185"></a>00185     };
-<a name="l00186"></a>00186 <span class="keyword">protected</span>:
-<a name="l00187"></a>00187     <a class="code" href="a00209.html">thread_bound_filter</a>(mode filter_mode): 
-<a name="l00188"></a>00188          <a class="code" href="a00165.html">filter</a>(static_cast<mode>(filter_mode | filter::filter_is_bound | filter::exact_exception_propagation))
-<a name="l00189"></a>00189     {}
-<a name="l00190"></a>00190 <span class="keyword">public</span>:
-<a name="l00192"></a>00192 
-<a name="l00197"></a>00197     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00209.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>(); 
-<a name="l00198"></a>00198 
-<a name="l00200"></a>00200 
-<a name="l00204"></a>00204     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00209.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>();
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 <span class="keyword">private</span>:
-<a name="l00208"></a>00208     result_type internal_process_item(<span class="keywordtype">bool</span> is_blocking);
-<a name="l00209"></a>00209 };
-<a name="l00210"></a>00210 
-<a name="l00212"></a>00212 
-<a name="l00213"></a><a class="code" href="a00180.html">00213</a> <span class="keyword">class </span><a class="code" href="a00180.html">pipeline</a> {
-<a name="l00214"></a>00214 <span class="keyword">public</span>:
-<a name="l00216"></a>00216     __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>();
+<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="l00220"></a>00220     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>();
-<a name="l00221"></a>00221 
-<a name="l00223"></a>00223     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00165.html">filter</a>& filter_ );
-<a name="l00224"></a>00224 
-<a name="l00226"></a>00226     <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="l00227"></a>00227 
-<a name="l00228"></a>00228 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00230"></a>00230 <span class="preprocessor">    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );</span>
-<a name="l00231"></a>00231 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00232"></a>00232 <span class="preprocessor"></span>
-<a name="l00234"></a>00234     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00180.html#2c84aef5b834b555ee220b176e25931e">clear</a>();
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 <span class="keyword">private</span>:
-<a name="l00237"></a>00237     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-<a name="l00238"></a>00238     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00239"></a>00239     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00165.html">filter</a>;
-<a name="l00240"></a>00240     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00209.html">thread_bound_filter</a>;
-<a name="l00241"></a>00241     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_cleaner;
-<a name="l00242"></a>00242     <span class="keyword">friend</span> <span class="keyword">class </span>tbb::interface5::internal::pipeline_proxy;
-<a name="l00243"></a>00243 
-<a name="l00245"></a>00245     <a class="code" href="a00165.html">filter</a>* filter_list;
-<a name="l00246"></a>00246 
-<a name="l00248"></a>00248     <a class="code" href="a00165.html">filter</a>* filter_end;
-<a name="l00249"></a>00249 
-<a name="l00251"></a>00251     <a class="code" href="a00199.html">task</a>* end_counter;
-<a name="l00252"></a>00252 
-<a name="l00254"></a>00254     <a class="code" href="a00143.html">atomic<internal::Token></a> input_tokens;
-<a name="l00255"></a>00255 
-<a name="l00257"></a>00257     <a class="code" href="a00143.html">atomic<internal::Token></a> token_counter;
-<a name="l00258"></a>00258 
-<a name="l00260"></a>00260     <span class="keywordtype">bool</span> end_of_input;
-<a name="l00261"></a>00261 
-<a name="l00263"></a>00263     <span class="keywordtype">bool</span> has_thread_bound_filters;
-<a name="l00264"></a>00264 
-<a name="l00266"></a>00266     <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00165.html">filter</a>& filter_ );
-<a name="l00267"></a>00267 
-<a name="l00269"></a>00269     <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="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">    void clear_filters();</span>
-<a name="l00274"></a>00274 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00275"></a>00275 <span class="preprocessor"></span>};
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00278"></a>00278 <span class="comment">// Support for lambda-friendly parallel_pipeline interface</span>
-<a name="l00279"></a>00279 <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281 <span class="keyword">namespace </span>interface5 {
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 <span class="keyword">namespace </span>internal {
-<a name="l00284"></a>00284     <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="l00285"></a>00285 }
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287 <span class="keyword">class </span>flow_control {
-<a name="l00288"></a>00288     <span class="keywordtype">bool</span> is_pipeline_stopped;
-<a name="l00289"></a>00289     flow_control() { is_pipeline_stopped = <span class="keyword">false</span>; }
-<a name="l00290"></a>00290     <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="l00291"></a>00291 <span class="keyword">public</span>:
-<a name="l00292"></a>00292     <span class="keywordtype">void</span> stop() { is_pipeline_stopped = <span class="keyword">true</span>; }
-<a name="l00293"></a>00293 };
-<a name="l00294"></a>00294 
-<a name="l00296"></a>00296 <span class="keyword">namespace </span>internal {
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 <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="l00299"></a>00299 <span class="keyword">class </span>concrete_filter: <span class="keyword">public</span> tbb::filter {
-<a name="l00300"></a>00300     Body my_body;
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>* input) {
-<a name="l00303"></a>00303         T* temp_input = (T*)input;
-<a name="l00304"></a>00304         <span class="comment">// Call user's operator()() here</span>
-<a name="l00305"></a>00305         <span class="keywordtype">void</span>* output = (<span class="keywordtype">void</span>*) <span class="keyword">new</span> U(my_body(*temp_input)); 
-<a name="l00306"></a>00306         <span class="keyword">delete</span> temp_input;
-<a name="l00307"></a>00307         <span class="keywordflow">return</span> output;
-<a name="l00308"></a>00308     }
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310 <span class="keyword">public</span>:
-<a name="l00311"></a>00311     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00312"></a>00312 };
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
-<a name="l00315"></a>00315 <span class="keyword">class </span>concrete_filter<void,U,Body>: <span class="keyword">public</span> filter {
-<a name="l00316"></a>00316     Body my_body;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318     <span class="comment">/*override*/</span><span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>*) {
-<a name="l00319"></a>00319         flow_control control;
-<a name="l00320"></a>00320         U temp_output = my_body(control);
-<a name="l00321"></a>00321         <span class="keywordtype">void</span>* output = control.is_pipeline_stopped ? NULL : (<span class="keywordtype">void</span>*) <span class="keyword">new</span> U(temp_output); 
-<a name="l00322"></a>00322         <span class="keywordflow">return</span> output;
-<a name="l00323"></a>00323     }
-<a name="l00324"></a>00324 <span class="keyword">public</span>:
-<a name="l00325"></a>00325     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00326"></a>00326 };
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Body>
-<a name="l00329"></a>00329 <span class="keyword">class </span>concrete_filter<T,void,Body>: <span class="keyword">public</span> filter {
-<a name="l00330"></a>00330     Body my_body;
-<a name="l00331"></a>00331    
-<a name="l00332"></a>00332     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>* input) {
-<a name="l00333"></a>00333         T* temp_input = (T*)input;
-<a name="l00334"></a>00334         my_body(*temp_input);
-<a name="l00335"></a>00335         <span class="keyword">delete</span> temp_input;
-<a name="l00336"></a>00336         <span class="keywordflow">return</span> NULL;
-<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> Body>
-<a name="l00343"></a>00343 <span class="keyword">class </span>concrete_filter<void,void,Body>: <span class="keyword">public</span> filter {
-<a name="l00344"></a>00344     Body my_body;
-<a name="l00345"></a>00345     
-<a name="l00347"></a>00347     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>*) {
-<a name="l00348"></a>00348         flow_control control;
-<a name="l00349"></a>00349         my_body(control);
-<a name="l00350"></a>00350         <span class="keywordtype">void</span>* output = control.is_pipeline_stopped ? NULL : (<span class="keywordtype">void</span>*)(intptr_t)-1; 
-<a name="l00351"></a>00351         <span class="keywordflow">return</span> output;
-<a name="l00352"></a>00352     }
-<a name="l00353"></a>00353 <span class="keyword">public</span>:
-<a name="l00354"></a>00354     concrete_filter(filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00355"></a>00355 };
-<a name="l00356"></a>00356 
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359 <span class="keyword">class </span>pipeline_proxy {
-<a name="l00360"></a>00360     <a class="code" href="a00180.html">tbb::pipeline</a> my_pipe;
-<a name="l00361"></a>00361 <span class="keyword">public</span>:
-<a name="l00362"></a>00362     pipeline_proxy( <span class="keyword">const</span> filter_t<void,void>& filter_chain );
-<a name="l00363"></a>00363     ~pipeline_proxy() {
-<a name="l00364"></a>00364         <span class="keywordflow">while</span>( filter* f = my_pipe.filter_list ) 
-<a name="l00365"></a>00365             <span class="keyword">delete</span> f; <span class="comment">// filter destructor removes it from the pipeline</span>
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367     <a class="code" href="a00180.html">tbb::pipeline</a>* operator->() { <span class="keywordflow">return</span> &my_pipe; }
-<a name="l00368"></a>00368 };
-<a name="l00369"></a>00369 
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372 <span class="keyword">class </span>filter_node: tbb::internal::no_copy {
-<a name="l00374"></a>00374     <a class="code" href="a00143.html">tbb::atomic<intptr_t></a> ref_count;
-<a name="l00375"></a>00375 <span class="keyword">protected</span>:
-<a name="l00376"></a>00376     filter_node() {
-<a name="l00377"></a>00377         ref_count = 0;
-<a name="l00378"></a>00378 <span class="preprocessor">#ifdef __TBB_TEST_FILTER_NODE_COUNT</span>
-<a name="l00379"></a>00379 <span class="preprocessor"></span>        ++(__TBB_TEST_FILTER_NODE_COUNT);
-<a name="l00380"></a>00380 <span class="preprocessor">#endif</span>
-<a name="l00381"></a>00381 <span class="preprocessor"></span>    }
-<a name="l00382"></a>00382 <span class="keyword">public</span>:
-<a name="l00384"></a>00384     <span class="keyword">virtual</span> <span class="keywordtype">void</span> add_to( pipeline& ) = 0;
-<a name="l00386"></a>00386     <span class="keywordtype">void</span> add_ref() {++ref_count;}
-<a name="l00388"></a>00388     <span class="keywordtype">void</span> remove_ref() {
-<a name="l00389"></a>00389         __TBB_ASSERT(ref_count>0,<span class="stringliteral">"ref_count underflow"</span>);
-<a name="l00390"></a>00390         <span class="keywordflow">if</span>( --ref_count==0 ) 
-<a name="l00391"></a>00391             <span class="keyword">delete</span> <span class="keyword">this</span>;
-<a name="l00392"></a>00392     }
-<a name="l00393"></a>00393     <span class="keyword">virtual</span> ~filter_node() {
-<a name="l00394"></a>00394 <span class="preprocessor">#ifdef __TBB_TEST_FILTER_NODE_COUNT</span>
-<a name="l00395"></a>00395 <span class="preprocessor"></span>        --(__TBB_TEST_FILTER_NODE_COUNT);
-<a name="l00396"></a>00396 <span class="preprocessor">#endif</span>
-<a name="l00397"></a>00397 <span class="preprocessor"></span>    }
-<a name="l00398"></a>00398 };
-<a name="l00399"></a>00399 
-<a name="l00401"></a>00401 <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="l00402"></a>00402 <span class="keyword">class </span>filter_node_leaf: <span class="keyword">public</span> filter_node  {
-<a name="l00403"></a>00403     <span class="keyword">const</span> tbb::filter::mode mode;
-<a name="l00404"></a>00404     <span class="keyword">const</span> Body& body;
-<a name="l00405"></a>00405     <span class="comment">/*override*/</span><span class="keywordtype">void</span> add_to( pipeline& p ) {
-<a name="l00406"></a>00406         concrete_filter<T,U,Body>* f = <span class="keyword">new</span> concrete_filter<T,U,Body>(mode,body);
-<a name="l00407"></a>00407         p.add_filter( *f );
-<a name="l00408"></a>00408     }
-<a name="l00409"></a>00409 <span class="keyword">public</span>:
-<a name="l00410"></a>00410     filter_node_leaf( tbb::filter::mode m, <span class="keyword">const</span> Body& b ) : mode(m), body(b) {}
-<a name="l00411"></a>00411 };
-<a name="l00412"></a>00412 
-<a name="l00414"></a>00414 <span class="keyword">class </span>filter_node_join: <span class="keyword">public</span> filter_node {
-<a name="l00415"></a>00415     <span class="keyword">friend</span> <span class="keyword">class </span>filter_node; <span class="comment">// to suppress GCC 3.2 warnings</span>
-<a name="l00416"></a>00416     filter_node& left;
-<a name="l00417"></a>00417     filter_node& right;
-<a name="l00418"></a>00418     <span class="comment">/*override*/</span>~filter_node_join() {
-<a name="l00419"></a>00419        left.remove_ref();
-<a name="l00420"></a>00420        right.remove_ref();
-<a name="l00421"></a>00421     }
-<a name="l00422"></a>00422     <span class="comment">/*override*/</span><span class="keywordtype">void</span> add_to( pipeline& p ) {
-<a name="l00423"></a>00423         left.add_to(p);
-<a name="l00424"></a>00424         right.add_to(p);
-<a name="l00425"></a>00425     }
-<a name="l00426"></a>00426 <span class="keyword">public</span>:
-<a name="l00427"></a>00427     filter_node_join( filter_node& x, filter_node& y ) : left(x), right(y) {
-<a name="l00428"></a>00428        left.add_ref();
-<a name="l00429"></a>00429        right.add_ref();
-<a name="l00430"></a>00430     }
-<a name="l00431"></a>00431 };
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433 } <span class="comment">// namespace internal</span>
-<a name="l00435"></a>00435 <span class="comment"></span>
-<a name="l00436"></a>00436 <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="l00437"></a>00437 filter_t<T,U> make_filter(tbb::filter::mode mode, <span class="keyword">const</span> Body& body) {
-<a name="l00438"></a>00438     <span class="keywordflow">return</span> <span class="keyword">new</span> internal::filter_node_leaf<T,U,Body>(mode, body);
-<a name="l00439"></a>00439 }
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441 <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="l00442"></a>00442 filter_t<T,U> operator& (<span class="keyword">const</span> filter_t<T,V>& left, <span class="keyword">const</span> filter_t<V,U>& right) {
-<a name="l00443"></a>00443     __TBB_ASSERT(left.root,<span class="stringliteral">"cannot use default-constructed filter_t as left argument of '&'"</span>);
-<a name="l00444"></a>00444     __TBB_ASSERT(right.root,<span class="stringliteral">"cannot use default-constructed filter_t as right argument of '&'"</span>);
-<a name="l00445"></a>00445     <span class="keywordflow">return</span> <span class="keyword">new</span> internal::filter_node_join(*left.root,*right.root);
-<a name="l00446"></a>00446 }
-<a name="l00447"></a>00447 
-<a name="l00449"></a>00449 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00450"></a><a class="code" href="a00166.html">00450</a> <span class="keyword">class </span><a class="code" href="a00166.html">filter_t</a> {
-<a name="l00451"></a>00451     <span class="keyword">typedef</span> internal::filter_node filter_node;
-<a name="l00452"></a>00452     filter_node* root;
-<a name="l00453"></a>00453     <a class="code" href="a00166.html">filter_t</a>( filter_node* root_ ) : root(root_) {
-<a name="l00454"></a>00454         root->add_ref();
-<a name="l00455"></a>00455     }
-<a name="l00456"></a>00456     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_proxy;
-<a name="l00457"></a>00457     <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="l00458"></a>00458     <span class="keyword">friend</span> <a class="code" href="a00166.html">filter_t<T_,U_></a> make_filter(tbb::filter::mode, <span class="keyword">const</span> Body& );
-<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     <span class="keyword">friend</span> <a class="code" href="a00166.html">filter_t<T_,U_></a> operator& (<span class="keyword">const</span> <a class="code" href="a00166.html">filter_t<T_,V_></a>& , <span class="keyword">const</span> <a class="code" href="a00166.html">filter_t<V_,U_></a>& );
-<a name="l00461"></a>00461 <span class="keyword">public</span>:
-<a name="l00462"></a>00462     <a class="code" href="a00166.html">filter_t</a>() : root(NULL) {}
-<a name="l00463"></a>00463     <a class="code" href="a00166.html">filter_t</a>( <span class="keyword">const</span> <a class="code" href="a00166.html">filter_t<T,U></a>& rhs ) : root(rhs.<a class="code" href="a00166.html#a44d0f06c15bc89c324c5581956799fd">root</a>) {
-<a name="l00464"></a>00464         <span class="keywordflow">if</span>( root ) root->add_ref();
-<a name="l00465"></a>00465     }
-<a name="l00466"></a>00466     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00467"></a>00467     <a class="code" href="a00166.html">filter_t</a>( tbb::filter::mode mode, <span class="keyword">const</span> Body& body ) :
-<a name="l00468"></a>00468         root( <span class="keyword">new</span> internal::filter_node_leaf<T,U,Body>(mode, body) ) {
-<a name="l00469"></a>00469         root->add_ref();
-<a name="l00470"></a>00470     }
-<a name="l00471"></a>00471 
-<a name="l00472"></a>00472     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00166.html">filter_t<T,U></a>& rhs ) {
-<a name="l00473"></a>00473         <span class="comment">// Order of operations below carefully chosen so that reference counts remain correct</span>
-<a name="l00474"></a>00474         <span class="comment">// in unlikely event that remove_ref throws exception.</span>
-<a name="l00475"></a>00475         filter_node* old = root;
-<a name="l00476"></a>00476         root = rhs.<a class="code" href="a00166.html#a44d0f06c15bc89c324c5581956799fd">root</a>; 
-<a name="l00477"></a>00477         <span class="keywordflow">if</span>( root ) root->add_ref();
-<a name="l00478"></a>00478         <span class="keywordflow">if</span>( old ) old->remove_ref();
-<a name="l00479"></a>00479     }
-<a name="l00480"></a>00480     ~<a class="code" href="a00166.html">filter_t</a>() {
-<a name="l00481"></a>00481         <span class="keywordflow">if</span>( root ) root->remove_ref();
-<a name="l00482"></a>00482     }
-<a name="l00483"></a>00483     <span class="keywordtype">void</span> clear() {
-<a name="l00484"></a>00484         <span class="comment">// Like operator= with filter_t() on right side.</span>
-<a name="l00485"></a>00485         <span class="keywordflow">if</span>( root ) {
-<a name="l00486"></a>00486             filter_node* old = root;
-<a name="l00487"></a>00487             root = NULL;
-<a name="l00488"></a>00488             old->remove_ref();
-<a name="l00489"></a>00489         }
-<a name="l00490"></a>00490     }
-<a name="l00491"></a>00491 };
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493 <span class="keyword">inline</span> internal::pipeline_proxy::pipeline_proxy( <span class="keyword">const</span> <a class="code" href="a00166.html">filter_t<void,void></a>& filter_chain ) : my_pipe() {
-<a name="l00494"></a>00494     __TBB_ASSERT( filter_chain.<a class="code" href="a00166.html#a44d0f06c15bc89c324c5581956799fd">root</a>, <span class="stringliteral">"cannot apply parallel_pipeline to default-constructed filter_t"</span>  );
-<a name="l00495"></a>00495     filter_chain.<a class="code" href="a00166.html#a44d0f06c15bc89c324c5581956799fd">root</a>->add_to(my_pipe);
-<a name="l00496"></a>00496 }
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498 <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="a00166.html">filter_t<void,void></a>& filter_chain
-<a name="l00499"></a>00499 #<span class="keywordflow">if</span> __TBB_TASK_GROUP_CONTEXT
-<a name="l00500"></a>00500     , <a class="code" href="a00201.html">tbb::task_group_context</a>& context
-<a name="l00501"></a>00501 #endif
-<a name="l00502"></a>00502     ) {
-<a name="l00503"></a>00503     internal::pipeline_proxy pipe(filter_chain);
-<a name="l00504"></a>00504     <span class="comment">// tbb::pipeline::run() is called via the proxy</span>
-<a name="l00505"></a>00505     pipe->run(max_number_of_live_tokens
-<a name="l00506"></a>00506 #<span class="keywordflow">if</span> __TBB_TASK_GROUP_CONTEXT
-<a name="l00507"></a>00507               , context
-<a name="l00508"></a>00508 #endif
-<a name="l00509"></a>00509     );
-<a name="l00510"></a>00510 }
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00513"></a>00513 <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="l00514"></a>00514     <a class="code" href="a00201.html">tbb::task_group_context</a> context;
-<a name="l00515"></a>00515     parallel_pipeline(max_number_of_live_tokens, filter_chain, context);
-<a name="l00516"></a>00516 }
-<a name="l00517"></a>00517 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00518"></a>00518 <span class="preprocessor"></span>
-<a name="l00519"></a>00519 } <span class="comment">// interface5</span>
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521 <span class="keyword">using</span> interface5::flow_control;
-<a name="l00522"></a>00522 <span class="keyword">using</span> interface5::filter_t;
-<a name="l00523"></a>00523 <span class="keyword">using</span> interface5::make_filter;
-<a name="l00524"></a>00524 <span class="keyword">using</span> interface5::parallel_pipeline;
-<a name="l00525"></a>00525 
-<a name="l00526"></a>00526 } <span class="comment">// tbb</span>
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_pipeline_H */</span>
+<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>
 </pre></div><hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/a00414.html b/doc/html/a00414.html
new file mode 100644
index 0000000..d25676a
--- /dev/null
+++ b/doc/html/a00414.html
@@ -0,0 +1,507 @@
+<!DOCTYPE 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/a00420.html b/doc/html/a00420.html
deleted file mode 100644
index 5fb5d30..0000000
--- a/doc/html/a00420.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="a00143.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/a00421.html b/doc/html/a00421.html
deleted file mode 100644
index e997a39..0000000
--- a/doc/html/a00421.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="a00143.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="a00143.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/a00426.html b/doc/html/a00426.html
index a3161d8..8e0c3f1 100644
--- a/doc/html/a00426.html
+++ b/doc/html/a00426.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>spin_rw_mutex.h Source File</title>
+<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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,173 +39,92 @@
 <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="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_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="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="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="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     <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="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><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="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="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>
+<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.
diff --git a/doc/html/a00427.html b/doc/html/a00427.html
index 55ea6c0..bb67d91 100644
--- a/doc/html/a00427.html
+++ b/doc/html/a00427.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>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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,612 +39,124 @@
 <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_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_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="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_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="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="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="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="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>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="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="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="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="l00121"></a>00121     <span class="keyword">typedef</span> intptr_t reference_count;
-<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="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="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="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="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="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="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="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="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="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="a00163.html">00728</a> <span class="keyword">class </span><a class="code" href="a00163.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="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.
diff --git a/doc/html/a00422.html b/doc/html/a00428.html
similarity index 99%
rename from doc/html/a00422.html
rename to doc/html/a00428.html
index 38ebc5f..ff58bd8 100644
--- a/doc/html/a00422.html
+++ b/doc/html/a00428.html
@@ -87,7 +87,7 @@
 <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="a00143.html">atomic<status_t></a> status;
+<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 
@@ -117,7 +117,7 @@
 <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="a00143.html">atomic<status_t></a> status;
+<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 
diff --git a/doc/html/a00423.html b/doc/html/a00429.html
similarity index 98%
rename from doc/html/a00423.html
rename to doc/html/a00429.html
index 3230f45..838fb13 100644
--- a/doc/html/a00423.html
+++ b/doc/html/a00429.html
@@ -167,8 +167,8 @@
 <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="a00142.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00166"></a>00166         <span class="keyword">new</span>(tmp.<a class="code" href="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00190.html">scoped_lock</a>(*<span class="keyword">this</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);
@@ -181,8 +181,8 @@
 <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="a00142.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="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00190.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</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;
@@ -194,8 +194,8 @@
 <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="a00142.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="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<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>
diff --git a/doc/html/a00424.html b/doc/html/a00430.html
similarity index 96%
rename from doc/html/a00424.html
rename to doc/html/a00430.html
index 213525b..2ac2592 100644
--- a/doc/html/a00424.html
+++ b/doc/html/a00430.html
@@ -59,23 +59,23 @@
 <a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
 <a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 <a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00276.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
+<a name="l00044"></a>00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="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="a00276.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00048"></a>00048 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="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="a00276.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
+<a name="l00052"></a>00052 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="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="a00276.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
+<a name="l00056"></a>00056 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="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="a00276.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
+<a name="l00060"></a>00060 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="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="a00276.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
+<a name="l00064"></a>00064 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="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="a00276.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
+<a name="l00068"></a>00068 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="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="a00276.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00072"></a>00072 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="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="a00276.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00078"></a>00078 size_t __TBB_EXPORTED_FUNC <a class="code" href="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>
@@ -126,11 +126,11 @@
 <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="a00276.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
+<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="a00276.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
+<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() {
diff --git a/doc/html/a00425.html b/doc/html/a00431.html
similarity index 97%
rename from doc/html/a00425.html
rename to doc/html/a00431.html
index 49e79a1..3687329 100644
--- a/doc/html/a00425.html
+++ b/doc/html/a00431.html
@@ -144,8 +144,8 @@
 <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="a00142.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00147"></a>00147         <span class="keyword">new</span>(tmp.<a class="code" href="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00195.html">scoped_lock</a>(*<span class="keyword">this</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>
@@ -154,8 +154,8 @@
 <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="a00142.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="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00195.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</span>);
+<a name="l00157"></a>00157 <span class="preprocessor"></span>        <a class="code" href="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>
@@ -163,8 +163,8 @@
 <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="a00142.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="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<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>();
diff --git a/doc/html/a00426.html b/doc/html/a00432.html
similarity index 100%
copy from doc/html/a00426.html
copy to doc/html/a00432.html
diff --git a/doc/html/a00427.html b/doc/html/a00433.html
similarity index 99%
copy from doc/html/a00427.html
copy to doc/html/a00433.html
index 55ea6c0..58eccd3 100644
--- a/doc/html/a00427.html
+++ b/doc/html/a00433.html
@@ -542,7 +542,7 @@
 <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="a00163.html">00728</a> <span class="keyword">class </span><a class="code" href="a00163.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00199.html">task</a> {
+<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     }
diff --git a/doc/html/a00436.html b/doc/html/a00442.html
similarity index 100%
rename from doc/html/a00436.html
rename to doc/html/a00442.html
diff --git a/doc/html/a00446.html b/doc/html/a00446.html
deleted file mode 100644
index 0f5074f..0000000
--- a/doc/html/a00446.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/a00447.html b/doc/html/a00447.html
deleted file mode 100644
index 0131842..0000000
--- a/doc/html/a00447.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/a00443.html b/doc/html/a00449.html
similarity index 100%
rename from doc/html/a00443.html
rename to doc/html/a00449.html
diff --git a/doc/html/a00444.html b/doc/html/a00450.html
similarity index 100%
rename from doc/html/a00444.html
rename to doc/html/a00450.html
diff --git a/doc/html/a00452.html b/doc/html/a00452.html
index 5842d63..0f5074f 100644
--- a/doc/html/a00452.html
+++ b/doc/html/a00452.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb_config_lrb.h Source File</title>
+<title>tbb.h Source File</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,24 +39,50 @@
 <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="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="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_rel_acq_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>
+<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.
diff --git a/doc/html/a00453.html b/doc/html/a00453.html
index 7777cd7..0131842 100644
--- a/doc/html/a00453.html
+++ b/doc/html/a00453.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_exception.h Source File</title>
+<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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,277 +39,168 @@
 <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="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 
-<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="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><a class="code" href="a00147.html">00045</a> <span class="keyword">class </span><a class="code" href="a00147.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="a00147.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="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="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_invalid_buckets_number,
-<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="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>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="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>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="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="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="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="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="a00153.html">00185</a> <span class="keyword">class </span><a class="code" href="a00153.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="a00153.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00153.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="a00153.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00153.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="a00153.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="a00153.html">captured_exception</a> () <span class="keywordflow">throw</span>() {
-<a name="l00201"></a>00201         clear();
-<a name="l00202"></a>00202     }
+<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     <a class="code" href="a00153.html">captured_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00153.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="a00153.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00153.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="a00153.html">captured_exception</a>* __TBB_EXPORTED_METHOD <a class="code" href="a00153.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="a00153.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="a00153.html#2dd1be66ab32fa27e0ddef5707fa67ef">00219</a>     <span class="keywordtype">void</span> <a class="code" href="a00153.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="a00153.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="a00153.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="a00153.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="a00153.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="a00153.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="a00153.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="a00153.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>
+<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.
diff --git a/doc/html/a00451.html b/doc/html/a00457.html
similarity index 94%
rename from doc/html/a00451.html
rename to doc/html/a00457.html
index 266a9b4..09a4bb2 100644
--- a/doc/html/a00451.html
+++ b/doc/html/a00457.html
@@ -168,20 +168,25 @@
 <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 __FreeBSD__</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_PRIO_INHERIT_BROKEN 1</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span>
-<a name="l00180"></a>00180 <span class="preprocessor">    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __FreeBSD__ */</span>
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="preprocessor">#if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>
-<a name="l00186"></a>00186 <span class="preprocessor">    #define __TBB_ICC_ASM_VOLATILE_BROKEN 1</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span>
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_H */</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.
diff --git a/doc/html/a00458.html b/doc/html/a00458.html
index cf221d6..f9d3047 100644
--- a/doc/html/a00458.html
+++ b/doc/html/a00458.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_profiling.h Source File</title>
+<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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,81 +39,24 @@
 <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="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="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>
+<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.
diff --git a/doc/html/a00459.html b/doc/html/a00459.html
index 2eb8a4a..c1bdf09 100644
--- a/doc/html/a00459.html
+++ b/doc/html/a00459.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb_stddef.h Source File</title>
+<title>tbb_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>
@@ -19,7 +19,7 @@
     <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>
+<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>
@@ -39,205 +39,277 @@
 <a name="l00018"></a>00018 <span class="comment">    writing.</span>
 <a name="l00019"></a>00019 <span class="comment">*/</span>
 <a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_tbb_stddef_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_stddef_H</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="l00266"></a>00266 <span class="keyword">class </span>no_assign {
-<a name="l00267"></a>00267     <span class="comment">// Deny assignment</span>
-<a name="l00268"></a>00268     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> no_assign& );
-<a name="l00269"></a>00269 <span class="keyword">public</span>:
-<a name="l00270"></a>00270 <span class="preprocessor">#if __GNUC__</span>
-<a name="l00272"></a>00272 <span class="preprocessor">    no_assign() {}</span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
-<a name="l00274"></a>00274 };
-<a name="l00275"></a>00275 
-<a name="l00277"></a>00277 <span class="keyword">class </span>no_copy: no_assign {
-<a name="l00279"></a>00279     no_copy( <span class="keyword">const</span> no_copy& );
-<a name="l00280"></a>00280 <span class="keyword">public</span>:
-<a name="l00282"></a>00282     no_copy() {}
-<a name="l00283"></a>00283 };
-<a name="l00284"></a>00284 
-<a name="l00286"></a>00286 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00287"></a>00287 <span class="keyword">struct </span>allocator_type {
-<a name="l00288"></a>00288     <span class="keyword">typedef</span> T value_type;
-<a name="l00289"></a>00289 };
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00293"></a>00293 <span class="preprocessor">template<typename T></span>
-<a name="l00294"></a>00294 <span class="preprocessor"></span><span class="keyword">struct </span>allocator_type<const T> {
-<a name="l00295"></a>00295     <span class="keyword">typedef</span> T value_type;
-<a name="l00296"></a>00296 };
-<a name="l00297"></a>00297 <span class="preprocessor">#endif</span>
-<a name="l00298"></a>00298 <span class="preprocessor"></span>
-<a name="l00299"></a>00299 <span class="comment">// Struct to be used as a version tag for inline functions.</span>
-<a name="l00302"></a>00302 <span class="comment"></span><span class="keyword">struct </span>version_tag_v3 {};
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304 <span class="keyword">typedef</span> version_tag_v3 version_tag;
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306 } <span class="comment">// internal</span>
-<a name="l00308"></a>00308 <span class="comment"></span>
-<a name="l00309"></a>00309 } <span class="comment">// tbb</span>
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
-<a name="l00312"></a>00312 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
+<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.
diff --git a/doc/html/a00454.html b/doc/html/a00460.html
similarity index 60%
rename from doc/html/a00454.html
rename to doc/html/a00460.html
index a8b9aaa..14de40d 100644
--- a/doc/html/a00454.html
+++ b/doc/html/a00460.html
@@ -106,543 +106,545 @@
 <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="l00088"></a>00088 <span class="preprocessor">#if    !defined(__TBB_CompareAndSwap4) \</span>
-<a name="l00089"></a>00089 <span class="preprocessor">    || !defined(__TBB_CompareAndSwap8) \</span>
-<a name="l00090"></a>00090 <span class="preprocessor">    || !defined(__TBB_Yield)           \</span>
-<a name="l00091"></a>00091 <span class="preprocessor">    || !defined(__TBB_release_consistency_helper)</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#error Minimal requirements for tbb_machine.h not satisfied </span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span>
-<a name="l00095"></a>00095 <span class="preprocessor">#ifndef __TBB_load_with_acquire</span>
-<a name="l00097"></a>00097 <span class="preprocessor">    template<typename T></span>
-<a name="l00098"></a>00098 <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="l00099"></a>00099         T temp = location;
-<a name="l00100"></a>00100         __TBB_release_consistency_helper();
-<a name="l00101"></a>00101         <span class="keywordflow">return</span> temp;
-<a name="l00102"></a>00102     }
-<a name="l00103"></a>00103 <span class="preprocessor">#endif</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span>
-<a name="l00105"></a>00105 <span class="preprocessor">#ifndef __TBB_store_with_release</span>
-<a name="l00107"></a>00107 <span class="preprocessor">    template<typename T, typename V></span>
-<a name="l00108"></a>00108 <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="l00109"></a>00109         __TBB_release_consistency_helper();
-<a name="l00110"></a>00110         location = T(value); 
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112 <span class="preprocessor">#endif</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span>
-<a name="l00114"></a>00114 <span class="preprocessor">#ifndef __TBB_Pause</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Pause(int32_t) {
-<a name="l00116"></a>00116         __TBB_Yield();
-<a name="l00117"></a>00117     }
-<a name="l00118"></a>00118 <span class="preprocessor">#endif</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></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 
-<a name="l00124"></a>00124 
-<a name="l00125"></a><a class="code" href="a00145.html">00125</a> <span class="keyword">class </span><a class="code" href="a00145.html">atomic_backoff</a> {
-<a name="l00127"></a>00127 
-<a name="l00129"></a>00129     <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
-<a name="l00130"></a>00130     int32_t count;
-<a name="l00131"></a>00131 <span class="keyword">public</span>:
-<a name="l00132"></a>00132     <a class="code" href="a00145.html">atomic_backoff</a>() : count(1) {}
-<a name="l00133"></a>00133 
-<a name="l00135"></a><a class="code" href="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">00135</a>     <span class="keywordtype">void</span> <a class="code" href="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>() {
-<a name="l00136"></a>00136         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
-<a name="l00137"></a>00137             __TBB_Pause(count);
-<a name="l00138"></a>00138             <span class="comment">// Pause twice as long the next time.</span>
-<a name="l00139"></a>00139             count*=2;
-<a name="l00140"></a>00140         } <span class="keywordflow">else</span> {
-<a name="l00141"></a>00141             <span class="comment">// Pause is so long that we might as well yield CPU to scheduler.</span>
-<a name="l00142"></a>00142             __TBB_Yield();
-<a name="l00143"></a>00143         }
-<a name="l00144"></a>00144     }
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="comment">// pause for a few times and then return false immediately.</span>
-<a name="l00147"></a>00147     <span class="keywordtype">bool</span> bounded_pause() {
-<a name="l00148"></a>00148         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
-<a name="l00149"></a>00149             __TBB_Pause(count);
-<a name="l00150"></a>00150             <span class="comment">// Pause twice as long the next time.</span>
-<a name="l00151"></a>00151             count*=2;
-<a name="l00152"></a>00152             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00153"></a>00153         } <span class="keywordflow">else</span> {
-<a name="l00154"></a>00154             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00155"></a>00155         }
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <span class="keywordtype">void</span> reset() {
-<a name="l00159"></a>00159         count = 1;
-<a name="l00160"></a>00160     }
-<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> T, <span class="keyword">typename</span> U>
-<a name="l00166"></a>00166 <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="l00167"></a>00167     atomic_backoff backoff;
-<a name="l00168"></a>00168     <span class="keywordflow">while</span>( location==value ) backoff.pause();
-<a name="l00169"></a>00169 }
-<a name="l00170"></a>00170 
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00174"></a>00174 <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="l00175"></a>00175     atomic_backoff backoff;
-<a name="l00176"></a>00176     <span class="keywordflow">while</span>( location!=value ) backoff.pause();
-<a name="l00177"></a>00177 }
+<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="comment">// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
-<a name="l00180"></a>00180 <span class="comment">// S should be either 1 or 2, for the mask calculation to work correctly.</span>
-<a name="l00181"></a>00181 <span class="comment">// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.</span>
-<a name="l00182"></a>00182 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00183"></a>00183 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T *ptr, T value, T comparand ) {
-<a name="l00184"></a>00184     <span class="keyword">volatile</span> uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
-<a name="l00185"></a>00185 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
-<a name="l00187"></a>00187 <span class="preprocessor">#else</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
-<a name="l00189"></a>00189 <span class="preprocessor">#endif</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>    <span class="keyword">const</span> uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
-<a name="l00191"></a>00191     atomic_backoff b;
-<a name="l00192"></a>00192     uint32_t result;
-<a name="l00193"></a>00193     <span class="keywordflow">for</span>(;;) {
-<a name="l00194"></a>00194         result = *base; <span class="comment">// reload the base value which might change during the pause</span>
-<a name="l00195"></a>00195         uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
-<a name="l00196"></a>00196         uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
-<a name="l00197"></a>00197         <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence. </span>
-<a name="l00198"></a>00198         result = __TBB_CompareAndSwap4( base, new_value, old_value );
-<a name="l00199"></a>00199         <span class="keywordflow">if</span>(  result==old_value               <span class="comment">// CAS succeeded</span>
-<a name="l00200"></a>00200           || ((result^old_value)&mask)!=0 )  <span class="comment">// CAS failed and the bits of interest have changed</span>
-<a name="l00201"></a>00201             <span class="keywordflow">break</span>;
-<a name="l00202"></a>00202         <span class="keywordflow">else</span>                                 <span class="comment">// CAS failed but the bits of interest left unchanged</span>
-<a name="l00203"></a>00203             b.pause();
-<a name="l00204"></a>00204     }
-<a name="l00205"></a>00205     <span class="keywordflow">return</span> T((result & mask) >> bitoffset);
-<a name="l00206"></a>00206 }
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00209"></a>00209 <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="l00210"></a>00210     <span class="keywordflow">return</span> __TBB_CompareAndSwapW((T *)ptr,value,comparand);
-<a name="l00211"></a>00211 }
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 <span class="keyword">template</span><>
-<a name="l00214"></a>00214 <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="l00215"></a>00215 #ifdef __TBB_CompareAndSwap1
-<a name="l00216"></a>00216     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(ptr,value,comparand);
-<a name="l00217"></a>00217 <span class="preprocessor">#else</span>
-<a name="l00218"></a>00218 <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="l00219"></a>00219 <span class="preprocessor">#endif</span>
-<a name="l00220"></a>00220 <span class="preprocessor"></span>}
+<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><>
-<a name="l00223"></a>00223 <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="l00224"></a>00224 #ifdef __TBB_CompareAndSwap2
-<a name="l00225"></a>00225     <span class="keywordflow">return</span> __TBB_CompareAndSwap2(ptr,value,comparand);
-<a name="l00226"></a>00226 <span class="preprocessor">#else</span>
-<a name="l00227"></a>00227 <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="l00228"></a>00228 <span class="preprocessor">#endif</span>
-<a name="l00229"></a>00229 <span class="preprocessor"></span>}
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 <span class="keyword">template</span><>
-<a name="l00232"></a>00232 <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="l00233"></a>00233     <span class="keywordflow">return</span> __TBB_CompareAndSwap4(ptr,value,comparand);
-<a name="l00234"></a>00234 }
+<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> 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="l00238"></a>00238     <span class="keywordflow">return</span> __TBB_CompareAndSwap8(ptr,value,comparand);
-<a name="l00239"></a>00239 }
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00242"></a>00242 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
-<a name="l00243"></a>00243     atomic_backoff b;
-<a name="l00244"></a>00244     T result;
-<a name="l00245"></a>00245     <span class="keywordflow">for</span>(;;) {
-<a name="l00246"></a>00246         result = *reinterpret_cast<volatile T *>(ptr);
-<a name="l00247"></a>00247         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence. </span>
-<a name="l00248"></a>00248         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result ) 
-<a name="l00249"></a>00249             <span class="keywordflow">break</span>;
-<a name="l00250"></a>00250         b.pause();
-<a name="l00251"></a>00251     }
-<a name="l00252"></a>00252     <span class="keywordflow">return</span> result;
+<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_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
+<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, value, result )==result ) 
+<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="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
-<a name="l00270"></a>00270 <span class="comment">// strict as type T.  Type type should have a trivial default constructor and destructor, so that</span>
-<a name="l00271"></a>00271 <span class="comment">// arrays of that type can be declared without initializers.  </span>
-<a name="l00272"></a>00272 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
-<a name="l00273"></a>00273 <span class="comment">// to a type bigger than T.</span>
-<a name="l00274"></a>00274 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
-<a name="l00275"></a>00275 <span class="comment">// strictest alignment is 16.</span>
-<a name="l00276"></a>00276 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
-<a name="l00277"></a>00277 <span class="preprocessor"></span>
-<a name="l00278"></a>00278 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
-<a name="l00279"></a>00279 <span class="preprocessor"></span><span class="keyword">struct </span>__TBB_machine_type_with_strictest_alignment {
-<a name="l00280"></a>00280     <span class="keywordtype">int</span> member[4];
-<a name="l00281"></a>00281 } __attribute__((aligned(16)));
-<a name="l00282"></a>00282 <span class="preprocessor">#elif _MSC_VER</span>
-<a name="l00283"></a>00283 <span class="preprocessor"></span>__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
-<a name="l00284"></a>00284     <span class="keywordtype">int</span> member[4];
-<a name="l00285"></a>00285 };
-<a name="l00286"></a>00286 <span class="preprocessor">#else</span>
-<a name="l00287"></a>00287 <span class="preprocessor"></span><span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment</span>
-<a name="l00288"></a>00288 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00289"></a>00289 <span class="preprocessor"></span>
-<a name="l00290"></a>00290 <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="l00291"></a>00291 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<1> { <span class="keywordtype">char</span> member; };
-<a name="l00292"></a>00292 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
-<a name="l00293"></a>00293 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
-<a name="l00294"></a>00294 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 <span class="preprocessor">#if _MSC_VER||defined(__GNUC__)&&__GNUC__==3 && __GNUC_MINOR__<=2  </span>
-<a name="l00298"></a>00298 <span class="preprocessor"></span>
-<a name="l00300"></a>00300 <span class="preprocessor">template<size_t Size, typename T> </span>
-<a name="l00301"></a><a class="code" href="a00212.html">00301</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00212.html">work_around_alignment_bug</a> {
-<a name="l00302"></a>00302 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00303"></a>00303 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof(T);
-<a name="l00304"></a>00304 <span class="preprocessor">#else</span>
-<a name="l00305"></a>00305 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof__(T);
-<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="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment></span>
-<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__ || __SUNPRO_CC</span>
-<a name="l00310"></a>00310 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)></span>
-<a name="l00311"></a>00311 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00312"></a>00312 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment</span>
-<a name="l00313"></a>00313 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00314"></a>00314 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* ____TBB_TypeWithAlignmentAtLeastAsStrict */</span>
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316 <span class="comment">// Template class here is to avoid instantiation of the static data for modules that don't use it</span>
-<a name="l00317"></a>00317 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00318"></a>00318 <span class="keyword">struct </span>reverse {
-<a name="l00319"></a>00319     <span class="keyword">static</span> <span class="keyword">const</span> T byte_table[256];
-<a name="l00320"></a>00320 };
-<a name="l00321"></a>00321 <span class="comment">// An efficient implementation of the reverse function utilizes a 2^8 lookup table holding the bit-reversed</span>
-<a name="l00322"></a>00322 <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="l00323"></a>00323 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00324"></a>00324 <span class="keyword">const</span> T reverse<T>::byte_table[256] = {
-<a name="l00325"></a>00325     0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
-<a name="l00326"></a>00326     0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
-<a name="l00327"></a>00327     0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
-<a name="l00328"></a>00328     0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
-<a name="l00329"></a>00329     0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
-<a name="l00330"></a>00330     0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
-<a name="l00331"></a>00331     0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
-<a name="l00332"></a>00332     0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
-<a name="l00333"></a>00333     0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
-<a name="l00334"></a>00334     0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
-<a name="l00335"></a>00335     0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
-<a name="l00336"></a>00336     0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
-<a name="l00337"></a>00337     0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
-<a name="l00338"></a>00338     0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
-<a name="l00339"></a>00339     0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
-<a name="l00340"></a>00340     0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-<a name="l00341"></a>00341 };
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 } <span class="comment">// namespace internal</span>
-<a name="l00344"></a>00344 } <span class="comment">// namespace tbb</span>
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1</span>
-<a name="l00347"></a>00347 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
-<a name="l00348"></a>00348 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00349"></a>00349 <span class="preprocessor"></span>
-<a name="l00350"></a>00350 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2 </span>
-<a name="l00351"></a>00351 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
-<a name="l00352"></a>00352 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00353"></a>00353 <span class="preprocessor"></span>
-<a name="l00354"></a>00354 <span class="preprocessor">#ifndef __TBB_CompareAndSwapW</span>
-<a name="l00355"></a>00355 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00356"></a>00356 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00357"></a>00357 <span class="preprocessor"></span>
-<a name="l00358"></a>00358 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1</span>
-<a name="l00359"></a>00359 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
-<a name="l00360"></a>00360 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00361"></a>00361 <span class="preprocessor"></span>
-<a name="l00362"></a>00362 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2</span>
-<a name="l00363"></a>00363 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
-<a name="l00364"></a>00364 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00365"></a>00365 <span class="preprocessor"></span>
-<a name="l00366"></a>00366 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4</span>
-<a name="l00367"></a>00367 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></span>
-<a name="l00368"></a>00368 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00369"></a>00369 <span class="preprocessor"></span>
-<a name="l00370"></a>00370 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8</span>
-<a name="l00371"></a>00371 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
-<a name="l00372"></a>00372 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00373"></a>00373 <span class="preprocessor"></span>
-<a name="l00374"></a>00374 <span class="preprocessor">#ifndef __TBB_FetchAndAddW</span>
-<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00376"></a>00376 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00377"></a>00377 <span class="preprocessor"></span>
-<a name="l00378"></a>00378 <span class="preprocessor">#ifndef __TBB_FetchAndStore1</span>
-<a name="l00379"></a>00379 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
-<a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00381"></a>00381 <span class="preprocessor"></span>
-<a name="l00382"></a>00382 <span class="preprocessor">#ifndef __TBB_FetchAndStore2</span>
-<a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></span>
-<a name="l00384"></a>00384 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00385"></a>00385 <span class="preprocessor"></span>
-<a name="l00386"></a>00386 <span class="preprocessor">#ifndef __TBB_FetchAndStore4</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></span>
-<a name="l00388"></a>00388 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00389"></a>00389 <span class="preprocessor"></span>
-<a name="l00390"></a>00390 <span class="preprocessor">#ifndef __TBB_FetchAndStore8</span>
-<a name="l00391"></a>00391 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
-<a name="l00392"></a>00392 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00393"></a>00393 <span class="preprocessor"></span>
-<a name="l00394"></a>00394 <span class="preprocessor">#ifndef __TBB_FetchAndStoreW</span>
-<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00397"></a>00397 <span class="preprocessor"></span>
-<a name="l00398"></a>00398 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+<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_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1</span>
-<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1acquire</span>
-<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1release</span>
-<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence</span>
-<a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00409"></a>00409 <span class="preprocessor"></span>
-<a name="l00410"></a>00410 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2</span>
-<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2acquire</span>
-<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00416"></a>00416 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2release</span>
-<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence</span>
-<a name="l00418"></a>00418 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00419"></a>00419 <span class="preprocessor"></span>
-<a name="l00420"></a>00420 <span class="preprocessor">#ifndef __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4</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><span class="preprocessor">#ifndef __TBB_CompareAndSwap4acquire</span>
-<a name="l00424"></a>00424 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00425"></a>00425 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4release</span>
-<a name="l00427"></a>00427 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence</span>
-<a name="l00428"></a>00428 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-<a name="l00429"></a>00429 <span class="preprocessor"></span>
-<a name="l00430"></a>00430 <span class="preprocessor">#ifndef __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00431"></a>00431 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8</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><span class="preprocessor">#ifndef __TBB_CompareAndSwap8acquire</span>
-<a name="l00434"></a>00434 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00436"></a>00436 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8release</span>
-<a name="l00437"></a>00437 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence</span>
-<a name="l00438"></a>00438 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00439"></a>00439 <span class="preprocessor"></span>
-<a name="l00440"></a>00440 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00441"></a>00441 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1</span>
-<a name="l00442"></a>00442 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1acquire</span>
-<a name="l00444"></a>00444 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00445"></a>00445 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00446"></a>00446 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1release</span>
-<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence</span>
-<a name="l00448"></a>00448 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00449"></a>00449 <span class="preprocessor"></span>
-<a name="l00450"></a>00450 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00451"></a>00451 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2</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><span class="preprocessor">#ifndef __TBB_FetchAndAdd2acquire</span>
-<a name="l00454"></a>00454 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00455"></a>00455 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00456"></a>00456 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2release</span>
-<a name="l00457"></a>00457 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence</span>
-<a name="l00458"></a>00458 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00459"></a>00459 <span class="preprocessor"></span>
-<a name="l00460"></a>00460 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00461"></a>00461 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4</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><span class="preprocessor">#ifndef __TBB_FetchAndAdd4acquire</span>
-<a name="l00464"></a>00464 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00465"></a>00465 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00466"></a>00466 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4release</span>
-<a name="l00467"></a>00467 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence</span>
-<a name="l00468"></a>00468 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00469"></a>00469 <span class="preprocessor"></span>
-<a name="l00470"></a>00470 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00471"></a>00471 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8</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><span class="preprocessor">#ifndef __TBB_FetchAndAdd8acquire</span>
-<a name="l00474"></a>00474 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00475"></a>00475 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00476"></a>00476 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8release</span>
-<a name="l00477"></a>00477 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence</span>
-<a name="l00478"></a>00478 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00479"></a>00479 <span class="preprocessor"></span>
-<a name="l00480"></a>00480 <span class="preprocessor">#ifndef __TBB_FetchAndStore1__TBB_full_fence</span>
-<a name="l00481"></a>00481 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1</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><span class="preprocessor">#ifndef __TBB_FetchAndStore1acquire</span>
-<a name="l00484"></a>00484 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence</span>
-<a name="l00485"></a>00485 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00486"></a>00486 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1release</span>
-<a name="l00487"></a>00487 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence</span>
-<a name="l00488"></a>00488 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00489"></a>00489 <span class="preprocessor"></span>
-<a name="l00490"></a>00490 <span class="preprocessor">#ifndef __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00491"></a>00491 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2</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><span class="preprocessor">#ifndef __TBB_FetchAndStore2acquire</span>
-<a name="l00494"></a>00494 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00495"></a>00495 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00496"></a>00496 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2release</span>
-<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence</span>
-<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00499"></a>00499 <span class="preprocessor"></span>
-<a name="l00500"></a>00500 <span class="preprocessor">#ifndef __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4</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><span class="preprocessor">#ifndef __TBB_FetchAndStore4acquire</span>
-<a name="l00504"></a>00504 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00505"></a>00505 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00506"></a>00506 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4release</span>
-<a name="l00507"></a>00507 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence</span>
-<a name="l00508"></a>00508 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00509"></a>00509 <span class="preprocessor"></span>
-<a name="l00510"></a>00510 <span class="preprocessor">#ifndef __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00511"></a>00511 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8</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><span class="preprocessor">#ifndef __TBB_FetchAndStore8acquire</span>
-<a name="l00514"></a>00514 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00515"></a>00515 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00516"></a>00516 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8release</span>
-<a name="l00517"></a>00517 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence</span>
-<a name="l00518"></a>00518 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00519"></a>00519 <span class="preprocessor"></span>
-<a name="l00520"></a>00520 <span class="preprocessor">#endif // __TBB_DECL_FENCED_ATOMICS</span>
-<a name="l00521"></a>00521 <span class="preprocessor"></span>
-<a name="l00522"></a>00522 <span class="comment">// Special atomic functions</span>
-<a name="l00523"></a>00523 <span class="preprocessor">#ifndef __TBB_FetchAndAddWrelease</span>
-<a name="l00524"></a>00524 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW</span>
-<a name="l00525"></a>00525 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00526"></a>00526 <span class="preprocessor"></span>
-<a name="l00527"></a>00527 <span class="preprocessor">#ifndef __TBB_FetchAndIncrementWacquire</span>
-<a name="l00528"></a>00528 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)</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>
-<a name="l00531"></a>00531 <span class="preprocessor">#ifndef __TBB_FetchAndDecrementWrelease</span>
-<a name="l00532"></a>00532 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))</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">#if __TBB_WORDSIZE==4</span>
-<a name="l00536"></a>00536 <span class="preprocessor"></span><span class="comment">// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8</span>
-<a name="l00537"></a>00537 <span class="preprocessor">#ifndef __TBB_Store8</span>
-<a name="l00538"></a>00538 <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="l00539"></a>00539     <a class="code" href="a00145.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00540"></a>00540     <span class="keywordflow">for</span>(;;) {
-<a name="l00541"></a>00541         int64_t result = *(int64_t *)ptr;
-<a name="l00542"></a>00542         <span class="keywordflow">if</span>( __TBB_CompareAndSwap8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
-<a name="l00543"></a>00543         b.<a class="code" href="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00544"></a>00544     }
-<a name="l00545"></a>00545 }
-<a name="l00546"></a>00546 <span class="preprocessor">#endif</span>
-<a name="l00547"></a>00547 <span class="preprocessor"></span>
-<a name="l00548"></a>00548 <span class="preprocessor">#ifndef __TBB_Load8</span>
-<a name="l00549"></a>00549 <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="l00550"></a>00550     int64_t result = *(int64_t *)ptr;
-<a name="l00551"></a>00551     result = __TBB_CompareAndSwap8((<span class="keyword">volatile</span> <span class="keywordtype">void</span> *)ptr,result,result);
-<a name="l00552"></a>00552     <span class="keywordflow">return</span> result;
-<a name="l00553"></a>00553 }
-<a name="l00554"></a>00554 <span class="preprocessor">#endif</span>
-<a name="l00555"></a>00555 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
-<a name="l00556"></a>00556 
-<a name="l00557"></a>00557 <span class="preprocessor">#ifndef __TBB_Log2</span>
-<a name="l00558"></a>00558 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
-<a name="l00559"></a>00559     <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
-<a name="l00560"></a>00560     intptr_t result = 0;
-<a name="l00561"></a>00561     uintptr_t tmp;
-<a name="l00562"></a>00562 <span class="preprocessor">#if __TBB_WORDSIZE>=8</span>
-<a name="l00563"></a>00563 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>32) ) { x=tmp; result += 32; }
-<a name="l00564"></a>00564 <span class="preprocessor">#endif</span>
-<a name="l00565"></a>00565 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>16) ) { x=tmp; result += 16; }
-<a name="l00566"></a>00566     <span class="keywordflow">if</span>( (tmp = x>>8) )  { x=tmp; result += 8; }
-<a name="l00567"></a>00567     <span class="keywordflow">if</span>( (tmp = x>>4) )  { x=tmp; result += 4; }
-<a name="l00568"></a>00568     <span class="keywordflow">if</span>( (tmp = x>>2) )  { x=tmp; result += 2; }
-<a name="l00569"></a>00569     <span class="keywordflow">return</span> (x&2)? result+1: result;
-<a name="l00570"></a>00570 }
-<a name="l00571"></a>00571 <span class="preprocessor">#endif</span>
-<a name="l00572"></a>00572 <span class="preprocessor"></span>
-<a name="l00573"></a>00573 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
-<a name="l00574"></a>00574 <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="l00575"></a>00575     <a class="code" href="a00145.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00576"></a>00576     <span class="keywordflow">for</span>(;;) {
-<a name="l00577"></a>00577         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-<a name="l00578"></a>00578         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
-<a name="l00579"></a>00579         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-<a name="l00580"></a>00580         b.<a class="code" href="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00581"></a>00581     }
-<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="preprocessor">#ifndef __TBB_AtomicAND</span>
-<a name="l00586"></a>00586 <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="l00587"></a>00587     <a class="code" href="a00145.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00588"></a>00588     <span class="keywordflow">for</span>(;;) {
-<a name="l00589"></a>00589         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-<a name="l00590"></a>00590         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
-<a name="l00591"></a>00591         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-<a name="l00592"></a>00592         b.<a class="code" href="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00593"></a>00593     }
-<a name="l00594"></a>00594 }
-<a name="l00595"></a>00595 <span class="preprocessor">#endif</span>
-<a name="l00596"></a>00596 <span class="preprocessor"></span>
-<a name="l00597"></a>00597 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
-<a name="l00598"></a>00598 <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="l00599"></a>00599     <span class="keywordflow">return</span> __TBB_CompareAndSwap1(&flag,1,0)==0;
-<a name="l00600"></a>00600 }
-<a name="l00601"></a>00601 <span class="preprocessor">#endif</span>
-<a name="l00602"></a>00602 <span class="preprocessor"></span>
-<a name="l00603"></a>00603 <span class="preprocessor">#ifndef __TBB_LockByte</span>
-<a name="l00604"></a>00604 <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="l00605"></a>00605     <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
-<a name="l00606"></a>00606         <a class="code" href="a00145.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00607"></a>00607         <span class="keywordflow">do</span> {
-<a name="l00608"></a>00608             b.<a class="code" href="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00609"></a>00609         } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
-<a name="l00610"></a>00610     }
-<a name="l00611"></a>00611     <span class="keywordflow">return</span> 0;
-<a name="l00612"></a>00612 }
-<a name="l00613"></a>00613 <span class="preprocessor">#endif</span>
-<a name="l00614"></a>00614 <span class="preprocessor"></span>
-<a name="l00615"></a>00615 <span class="preprocessor">#ifndef __TBB_ReverseByte</span>
-<a name="l00616"></a>00616 <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="l00617"></a>00617     <span class="keywordflow">return</span> tbb::internal::reverse<unsigned char>::byte_table[src];
-<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="l00621"></a>00621 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00622"></a>00622 T __TBB_ReverseBits(T src)
-<a name="l00623"></a>00623 {
-<a name="l00624"></a>00624     T dst;
-<a name="l00625"></a>00625     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *original = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &src;
-<a name="l00626"></a>00626     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *reversed = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &dst;
-<a name="l00627"></a>00627 
-<a name="l00628"></a>00628     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = <span class="keyword">sizeof</span>(T)-1; i >= 0; i-- )
-<a name="l00629"></a>00629         reversed[i] = __TBB_ReverseByte( original[<span class="keyword">sizeof</span>(T)-i-1] );
-<a name="l00630"></a>00630 
-<a name="l00631"></a>00631     <span class="keywordflow">return</span> dst;
+<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 
-<a name="l00634"></a>00634 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
+<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.
diff --git a/doc/html/a00458.html b/doc/html/a00464.html
similarity index 100%
copy from doc/html/a00458.html
copy to doc/html/a00464.html
diff --git a/doc/html/a00459.html b/doc/html/a00465.html
similarity index 89%
copy from doc/html/a00459.html
copy to doc/html/a00465.html
index 2eb8a4a..3dc7ddf 100644
--- a/doc/html/a00459.html
+++ b/doc/html/a00465.html
@@ -200,44 +200,51 @@
 <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 <span class="keyword">class </span>no_assign {
-<a name="l00267"></a>00267     <span class="comment">// Deny assignment</span>
-<a name="l00268"></a>00268     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> no_assign& );
-<a name="l00269"></a>00269 <span class="keyword">public</span>:
-<a name="l00270"></a>00270 <span class="preprocessor">#if __GNUC__</span>
-<a name="l00272"></a>00272 <span class="preprocessor">    no_assign() {}</span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
-<a name="l00274"></a>00274 };
-<a name="l00275"></a>00275 
-<a name="l00277"></a>00277 <span class="keyword">class </span>no_copy: no_assign {
-<a name="l00279"></a>00279     no_copy( <span class="keyword">const</span> no_copy& );
-<a name="l00280"></a>00280 <span class="keyword">public</span>:
-<a name="l00282"></a>00282     no_copy() {}
+<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">template</span><<span class="keyword">typename</span> T>
-<a name="l00287"></a>00287 <span class="keyword">struct </span>allocator_type {
-<a name="l00288"></a>00288     <span class="keyword">typedef</span> T value_type;
-<a name="l00289"></a>00289 };
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00293"></a>00293 <span class="preprocessor">template<typename T></span>
-<a name="l00294"></a>00294 <span class="preprocessor"></span><span class="keyword">struct </span>allocator_type<const T> {
-<a name="l00295"></a>00295     <span class="keyword">typedef</span> T value_type;
-<a name="l00296"></a>00296 };
-<a name="l00297"></a>00297 <span class="preprocessor">#endif</span>
-<a name="l00298"></a>00298 <span class="preprocessor"></span>
-<a name="l00299"></a>00299 <span class="comment">// Struct to be used as a version tag for inline functions.</span>
-<a name="l00302"></a>00302 <span class="comment"></span><span class="keyword">struct </span>version_tag_v3 {};
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304 <span class="keyword">typedef</span> version_tag_v3 version_tag;
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306 } <span class="comment">// internal</span>
-<a name="l00308"></a>00308 <span class="comment"></span>
-<a name="l00309"></a>00309 } <span class="comment">// tbb</span>
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
-<a name="l00312"></a>00312 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
+<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.
diff --git a/doc/html/a00466.html b/doc/html/a00472.html
similarity index 100%
rename from doc/html/a00466.html
rename to doc/html/a00472.html
diff --git a/doc/html/a00474.html b/doc/html/a00480.html
similarity index 100%
rename from doc/html/a00474.html
rename to doc/html/a00480.html
diff --git a/doc/html/a00476.html b/doc/html/a00482.html
similarity index 100%
rename from doc/html/a00476.html
rename to doc/html/a00482.html
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
index 92e7cbc..bb8e3f7 100644
--- a/doc/html/annotated.html
+++ b/doc/html/annotated.html
@@ -21,33 +21,34 @@
     <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="a00141.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00142.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="a00143.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00144.html">tbb::atomic< void * ></a></td><td class="indexvalue">Specialization for <a class="el" href="a00144.html">atomic<void*></a>, for sake of not allowing arithmetic or operator-> </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00145.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="a00146.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00147.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00148.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="a00149.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="a00150.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="a00151.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="a00152.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="a00153.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="a00154.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="a00155.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="a00156.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="a00157.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="a00158.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="a00159.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="a00160.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="a00161.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="a00162.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00163.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="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="indexvalue">The <a class="el" href="a00164.html">enumerable_thread_specific</a> container </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00165.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00166.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="a00167.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="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>
@@ -60,7 +61,7 @@
   <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 pipeling that applies filters to items </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>
diff --git a/doc/html/deprecated.html b/doc/html/deprecated.html
index 64f4a72..e1f5336 100644
--- a/doc/html/deprecated.html
+++ b/doc/html/deprecated.html
@@ -15,7 +15,7 @@
     <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="a00161.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &destination) </dt>
+<dt>Member <a class="el" href="a00160.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &destination) </dt>
 <dd>Use try_pop() </dd>
 </dl>
 <hr>
diff --git a/doc/html/files.html b/doc/html/files.html
index 35b0b7f..73144ce 100644
--- a/doc/html/files.html
+++ b/doc/html/files.html
@@ -20,57 +20,57 @@
     <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="a00280.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>_concurrent_unordered_internal.h</b> <a href="a00298.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>_tbb_windef.h</b> <a href="a00308.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00310.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>atomic.h</b> <a href="a00311.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00319.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00320.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00321.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00322.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>combinable.h</b> <a href="a00324.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00325.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00335.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_unordered_map.h</b> <a href="a00336.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00341.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>critical_section.h</b> <a href="a00350.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>enumerable_thread_specific.h</b> <a href="a00353.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>mutex.h</b> <a href="a00362.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00364.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00365.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00366.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00375.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_for_each.h</b> <a href="a00379.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_invoke.h</b> <a href="a00381.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00387.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00391.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00396.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00400.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00404.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00409.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00420.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00421.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>reader_writer_lock.h</b> <a href="a00422.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00423.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="a00424.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00425.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00426.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task.h</b> <a href="a00427.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_group.h</b> <a href="a00436.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00443.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00444.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb.h</b> <a href="a00446.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00447.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_config.h</b> <a href="a00451.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_config_lrb.h</b> <a href="a00452.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00453.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00454.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_profiling.h</b> <a href="a00458.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00459.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00466.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbbmalloc_proxy.h</b> <a href="a00474.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00476.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <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>
 </table>
 <hr>
 <p></p>
diff --git a/doc/html/functions.html b/doc/html/functions.html
index 70fd895..7985ebe 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -62,152 +62,153 @@ 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="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="a00151.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_child()
+: <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="a00164.html#da7721b6c35d333ec89a37b63d0d82d3">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>assign()
-: <a class="el" href="a00162.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
-: <a class="el" href="a00162.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a><li>automatic
+: <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="a00162.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00164.html#5f94cdb3a743e8b57c70dcb1041cfdf9">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00148.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00148.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
-: <a class="el" href="a00156.html#414d15033d36c63aa3a40666dc4d6f5e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <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="a00162.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
-: <a class="el" href="a00162.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
-: <a class="el" href="a00162.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="a00164.html#e7be0d504ba71ae6c7479eb373a361ab">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#90b31e2954c6e4596c7900435a5f [...]
-: <a class="el" href="a00150.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00149.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00162.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
-: <a class="el" href="a00155.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00156.html#3bfe75fcb350ce39cf610c164f233edc">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_queue()
-: <a class="el" href="a00161.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00160.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
-: <a class="el" href="a00162.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00159.html#a9ead65cca68d4c49c7ef64d7899a4c8">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>const_iterator
-: <a class="el" href="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00155.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.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="a00151.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
+: <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="a00156.html#74f5ef06a06c5e619f156a1c76c04969">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
-: <a class="el" href="a00162.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
-: <a class="el" href="a00162.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00151.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
+: <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="a00153.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="a00155.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a><li>downgrade_to_reader()
+: <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="a00164.html#af91306d8e10e093226788a733ee59b4">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.htm [...]
-: <a class="el" href="a00164.html#9909c01ec91ef10908c5155d6350db2d">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00142.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enqueue()
+: <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="a00164.html#105a6487c8c4113ba89891b75243780c">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
-: <a class="el" href="a00156.html#0f500842d0cf791f8fa61662edb1b311">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
-: <a class="el" href="a00156.html#faad2108bd2be75e52293486af59f11e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
+: <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="a00165.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
-: <a class="el" href="a00156.html#bce7bdf46435115a95cca2aa73c5da83">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>freed
+: <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="a00162.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00162.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00156.html#199208eed6f09e200cda364f906be0fe">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><l [...]
-: <a class="el" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>grow_by()
-: <a class="el" href="a00162.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00162.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00156.html#cfe172677e5987004ef4a03e22fa338a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
-: <a class="el" href="a00156.html#3c27779fe66b79505390d084310d997e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
-: <a class="el" href="a00156.html#976c57edfb7f22b9f91a2e11f141eb4a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
-: <a class="el" href="a00156.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>interval_t()
+: <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="a00165.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <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="a00150.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00149.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00148.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <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="a00165.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <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="a00165.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <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="a00158.html#fc194e3a186dc935a5fb513cc9f8e898">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></ul>
+: <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="a00164.html#34423652c3add42563b1d5d44ca78158">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
+: <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="a00156.html#1f22480a290ddc6c145888d8f985531a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <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>malloc_type
+<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="a00162.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00156.html#1e45d3cbd1e2ae06f365f1b48e0df0b5">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00151. [...]
-: <a class="el" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00153.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00206.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
+: <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="a00153.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="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="a00157.html#e8938f0cd1211e88a1d73527ed3636c4">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00159.html#30f31106840700a4c3664b9cb1c31ca7">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
+: <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="a00165.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00158.html#57c6110bd20e95c06de5a199de988941">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</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="a00157.html#fcebc32c020202cc37e60eadef157569">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00159.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
-: <a class="el" href="a00162.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00156.html#2c0c42a2e1b5282b6739157df9ce2304">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
-: <a class="el" href="a00162.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00150.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
-: <a class="el" href="a00150.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
+: <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="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <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="a00155.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
+: <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="a00161.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>process_item()
+: <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="a00155.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.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="a00162.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00161.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
+: <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="a00164.html#48f5ab20db3c77faa7219deb28076e6c">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00162.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
+: <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
@@ -218,16 +219,16 @@ Here is a list of all documented class members with links to the class documenta
 : <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="a00155.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>register_pending_exception()
+: <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="a00156.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="a00162.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00162.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
+: <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="a00162.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>row_range_type
-: <a class="el" href="a00149.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
-: <a class="el" href="a00150.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00149.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <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()
@@ -236,12 +237,12 @@ Here is a list of all documented class members with links to the class documenta
 : <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="a00155.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_ref_count()
+: <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="a00162.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
-: <a class="el" href="a00164.html#101ecd32efae3ce1331c3d8a791c645b">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00156.html#17fd8c5fe8c6a86075f34aa4e8412ba3">tbb::interface4::concurrent_hash_map< Key, T, H [...]
-: <a class="el" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00148.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>spawn_and_wait_for_all()
+: <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()
@@ -249,7 +250,7 @@ Here is a list of all documented class members with links to the class documenta
 : <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="a00162.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00156.html#eddb0d2efe0b4f25a85c059e1c3dac15">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <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()
@@ -257,36 +258,36 @@ Here is a list of all documented class members with links to the class documenta
 : <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="a00153.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00206.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <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="a00155.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>try_process_item()
+: <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="a00155.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a></ul>
+: <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="a00160.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
+: <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="a00155.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00157.html#49eec74f272bab187d176c0d9d16a7fe">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accesso [...]
+: <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="a00153.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00206.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
+: <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="a00154.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
-: <a class="el" href="a00155.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
-: <a class="el" href="a00156.html#a1ac58997d8fbf242b266e3691573481">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
-: <a class="el" href="a00160.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
-: <a class="el" href="a00162.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00159.html#752b0c1ec74b94786403a75e42917d01">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~enumerable_thread_specific()
-: <a class="el" href="a00164.html#7f6e5b3654712ea003cbb7ebaffa8dd9">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
-: <a class="el" href="a00165.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
+: <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()
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
index c7261f4..8855797 100644
--- a/doc/html/functions_func.html
+++ b/doc/html/functions_func.html
@@ -61,137 +61,137 @@
 <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="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="a00151.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">tbb::cache_aligned_allocator< T ></a><li>allocate_child()
+: <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="a00164.html#da7721b6c35d333ec89a37b63d0d82d3">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>assign()
-: <a class="el" href="a00162.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
-: <a class="el" href="a00162.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00162.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00164.html#5f94cdb3a743e8b57c70dcb1041cfdf9">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00148.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00142.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00148.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
-: <a class="el" href="a00156.html#414d15033d36c63aa3a40666dc4d6f5e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <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="a00162.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
-: <a class="el" href="a00162.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
-: <a class="el" href="a00162.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="a00164.html#e7be0d504ba71ae6c7479eb373a361ab">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#90b31e2954c6e4596c7900435a5f [...]
-: <a class="el" href="a00150.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00149.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00162.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
-: <a class="el" href="a00155.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00156.html#3bfe75fcb350ce39cf610c164f233edc">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_queue()
-: <a class="el" href="a00161.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00160.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
-: <a class="el" href="a00162.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00159.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="a00151.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
+: <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="a00156.html#74f5ef06a06c5e619f156a1c76c04969">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
-: <a class="el" href="a00162.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
-: <a class="el" href="a00162.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00151.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
+: <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="a00153.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="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="a00164.html#af91306d8e10e093226788a733ee59b4">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.htm [...]
-: <a class="el" href="a00164.html#9909c01ec91ef10908c5155d6350db2d">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00148.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00142.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enqueue()
+: <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="a00164.html#105a6487c8c4113ba89891b75243780c">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
-: <a class="el" href="a00156.html#0f500842d0cf791f8fa61662edb1b311">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
-: <a class="el" href="a00156.html#faad2108bd2be75e52293486af59f11e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
+: <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="a00165.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
-: <a class="el" href="a00156.html#bce7bdf46435115a95cca2aa73c5da83">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>front()
-: <a class="el" href="a00162.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00162.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00156.html#199208eed6f09e200cda364f906be0fe">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><l [...]
-: <a class="el" href="a00148.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>grow_by()
-: <a class="el" href="a00162.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00162.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00156.html#cfe172677e5987004ef4a03e22fa338a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
-: <a class="el" href="a00156.html#3c27779fe66b79505390d084310d997e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
-: <a class="el" href="a00156.html#976c57edfb7f22b9f91a2e11f141eb4a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
-: <a class="el" href="a00156.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>interval_t()
+: <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="a00165.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <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="a00150.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00149.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00148.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <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="a00165.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <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="a00165.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <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="a00158.html#fc194e3a186dc935a5fb513cc9f8e898">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></ul>
+: <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="a00164.html#34423652c3add42563b1d5d44ca78158">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
+: <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="a00156.html#1f22480a290ddc6c145888d8f985531a">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <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="a00162.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00156.html#1e45d3cbd1e2ae06f365f1b48e0df0b5">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>, <a class="el" href="a00151. [...]
-: <a class="el" href="a00171.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00153.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00206.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
+: <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="a00153.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00206.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
+: <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="a00157.html#e8938f0cd1211e88a1d73527ed3636c4">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00159.html#30f31106840700a4c3664b9cb1c31ca7">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
+: <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="a00165.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00158.html#57c6110bd20e95c06de5a199de988941">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</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="a00157.html#fcebc32c020202cc37e60eadef157569">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00159.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
-: <a class="el" href="a00162.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00156.html#2c0c42a2e1b5282b6739157df9ce2304">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
-: <a class="el" href="a00162.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
+: <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="a00150.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
+: <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="a00145.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <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="a00155.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
+: <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="a00161.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>process_item()
+: <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="a00155.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.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="a00162.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00161.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
+: <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="a00164.html#48f5ab20db3c77faa7219deb28076e6c">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00162.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
+: <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()
@@ -200,13 +200,13 @@
 : <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="a00156.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="a00162.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00162.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
+: <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="a00162.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>rows()
-: <a class="el" href="a00150.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00149.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <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()
@@ -215,17 +215,17 @@
 : <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="a00155.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_ref_count()
+: <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="a00162.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
-: <a class="el" href="a00164.html#101ecd32efae3ce1331c3d8a791c645b">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00162.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00155.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00156.html#17fd8c5fe8c6a86075f34aa4e8412ba3">tbb::interface4::concurrent_hash_map< Key, T, H [...]
+: <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="a00162.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00156.html#eddb0d2efe0b4f25a85c059e1c3dac15">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <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()
@@ -233,33 +233,33 @@
 : <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="a00153.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00206.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <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="a00155.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>try_process_item()
+: <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="a00155.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a></ul>
+: <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="a00160.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
+: <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="a00153.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00206.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
+: <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="a00154.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
-: <a class="el" href="a00155.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
-: <a class="el" href="a00156.html#a1ac58997d8fbf242b266e3691573481">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
-: <a class="el" href="a00160.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
-: <a class="el" href="a00162.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00159.html#752b0c1ec74b94786403a75e42917d01">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~enumerable_thread_specific()
-: <a class="el" href="a00164.html#7f6e5b3654712ea003cbb7ebaffa8dd9">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
-: <a class="el" href="a00165.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~parallel_while()
+: <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()
diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html
index 0499987..40a47cb 100644
--- a/doc/html/functions_rela.html
+++ b/doc/html/functions_rela.html
@@ -34,7 +34,8 @@
  
 <p>
 <ul>
-<li>operator+
+<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>
 <hr>
diff --git a/doc/html/functions_type.html b/doc/html/functions_type.html
index 20895b7..e12219b 100644
--- a/doc/html/functions_type.html
+++ b/doc/html/functions_type.html
@@ -36,16 +36,16 @@
 <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="a00164.html#da7721b6c35d333ec89a37b63d0d82d3">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00155.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a><li>co [...]
-: <a class="el" href="a00148.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00155.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a><li>difference_type
-: <a class="el" href="a00155.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a><li>native_handle_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="a00150.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>reference
-: <a class="el" href="a00155.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a><li>row_range_type
-: <a class="el" href="a00149.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
-: <a class="el" href="a00155.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00148.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="a00155.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00160.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00157.html#49eec74f272bab187d176c0d9d16a7fe">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accesso [...]
+: <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 [...]
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/globals.html b/doc/html/globals.html
index a799f1d..e8feca6 100644
--- a/doc/html/globals.html
+++ b/doc/html/globals.html
@@ -29,15 +29,15 @@ Here is a list of all documented file members with links to the documentation:
 <p>
 <ul>
 <li>scalable_aligned_free()
-: <a class="el" href="a00276.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
-: <a class="el" href="a00276.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
-: <a class="el" href="a00276.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
-: <a class="el" href="a00276.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
-: <a class="el" href="a00276.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
-: <a class="el" href="a00276.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
-: <a class="el" href="a00276.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
-: <a class="el" href="a00276.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
-: <a class="el" href="a00276.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+: <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>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
index 853ac56..5322a98 100644
--- a/doc/html/globals_func.html
+++ b/doc/html/globals_func.html
@@ -29,15 +29,15 @@
 <p>
 <ul>
 <li>scalable_aligned_free()
-: <a class="el" href="a00276.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
-: <a class="el" href="a00276.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
-: <a class="el" href="a00276.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
-: <a class="el" href="a00276.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
-: <a class="el" href="a00276.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
-: <a class="el" href="a00276.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
-: <a class="el" href="a00276.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
-: <a class="el" href="a00276.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
-: <a class="el" href="a00276.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+: <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>
 <hr>
 <p></p>
 Copyright © 2005-2010 Intel Corporation.  All Rights Reserved.
diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html
index 152759b..e8416f8 100644
--- a/doc/html/hierarchy.html
+++ b/doc/html/hierarchy.html
@@ -21,39 +21,40 @@
     <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="a00141.html">tbb::affinity_partitioner</a>
-<li><a class="el" href="a00142.html">tbb::aligned_space< T, N ></a>
-<li><a class="el" href="a00143.html">tbb::atomic< T ></a>
-<li><a class="el" href="a00144.html">tbb::atomic< void * ></a>
-<li><a class="el" href="a00145.html">tbb::internal::atomic_backoff</a>
-<li><a class="el" href="a00146.html">tbb::auto_partitioner</a>
-<li><a class="el" href="a00147.html">tbb::bad_last_alloc</a>
-<li><a class="el" href="a00148.html">tbb::blocked_range< Value ></a>
-<li><a class="el" href="a00149.html">tbb::blocked_range2d< RowValue, ColValue ></a>
-<li><a class="el" href="a00150.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-<li><a class="el" href="a00148.html">tbb::blocked_range< I ></a>
-<li><a class="el" href="a00151.html">tbb::cache_aligned_allocator< T ></a>
-<li><a class="el" href="a00152.html">tbb::cache_aligned_allocator< void ></a>
-<li><a class="el" href="a00154.html">tbb::combinable< T ></a>
-<li><a class="el" href="a00155.html">tbb::concurrent_bounded_queue< T, A ></a>
+<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>
 <ul>
-<li><a class="el" href="a00161.html">tbb::deprecated::concurrent_queue< T, A ></a>
+<li><a class="el" href="a00160.html">tbb::deprecated::concurrent_queue< T, A ></a>
 </ul>
-<li><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>
-<li><a class="el" href="a00158.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>
-<li><a class="el" href="a00159.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>
+<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>
 <ul>
-<li><a class="el" href="a00157.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>
+<li><a class="el" href="a00156.html">tbb::interface4::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>
 </ul>
-<li><a class="el" href="a00160.html">tbb::strict_ppl::concurrent_queue< T, A ></a>
-<li><a class="el" href="a00162.html">tbb::concurrent_vector< T, A ></a>
-<li><a class="el" href="a00164.html">tbb::interface5::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-<li><a class="el" href="a00165.html">tbb::filter</a>
+<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>
 <ul>
 <li><a class="el" href="a00209.html">tbb::thread_bound_filter</a>
 </ul>
-<li><a class="el" href="a00166.html">tbb::interface5::filter_t< T, U ></a>
-<li><a class="el" href="a00167.html">tbb::final_scan_tag</a>
+<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>
@@ -86,7 +87,7 @@
 <li><a class="el" href="a00198.html">tbb::split</a>
 <li><a class="el" href="a00199.html">tbb::task</a>
 <ul>
-<li><a class="el" href="a00163.html">tbb::empty_task</a>
+<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>
@@ -96,7 +97,7 @@
 <li><a class="el" href="a00205.html">tbb::tbb_allocator< void ></a>
 <li><a class="el" href="a00206.html">tbb::tbb_exception</a>
 <ul>
-<li><a class="el" href="a00153.html">tbb::captured_exception</a>
+<li><a class="el" href="a00152.html">tbb::captured_exception</a>
 <li><a class="el" href="a00171.html">tbb::movable_exception< ExceptionData ></a>
 </ul>
 <li><a class="el" href="a00207.html">tbb::internal::tbb_exception_ptr</a>
diff --git a/doc/html/modules.html b/doc/html/modules.html
index 8f3371d..6401481 100644
--- a/doc/html/modules.html
+++ b/doc/html/modules.html
@@ -15,12 +15,12 @@
     <li><a href="pages.html"><span>Related Pages</span></a></li>
   </ul></div>
 <h1>Modules</h1>Here is a list of all modules:<ul>
-<li><a class="el" href="a00274.html">Algorithms</a>
-<li><a class="el" href="a00275.html">Containers</a>
-<li><a class="el" href="a00276.html">Memory Allocation</a>
-<li><a class="el" href="a00277.html">Synchronization</a>
-<li><a class="el" href="a00278.html">Timing</a>
-<li><a class="el" href="a00279.html">Task Scheduling</a>
+<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>
 </ul>
 <hr>
 <p></p>
diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html
index 7886652..4f7a719 100644
--- a/doc/html/namespacemembers.html
+++ b/doc/html/namespacemembers.html
@@ -39,13 +39,13 @@ Here is a list of all documented namespace members with links to the namespaces
 : <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="a00274.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
-: <a class="el" href="a00273.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00274.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
-: <a class="el" href="a00274.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
-: <a class="el" href="a00274.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
-: <a class="el" href="a00274.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
-: <a class="el" href="a00274.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
-: <a class="el" href="a00274.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>release
+: <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>
diff --git a/doc/html/namespacemembers_func.html b/doc/html/namespacemembers_func.html
index 1408889..fe506d0 100644
--- a/doc/html/namespacemembers_func.html
+++ b/doc/html/namespacemembers_func.html
@@ -34,13 +34,13 @@
 <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="a00274.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
-: <a class="el" href="a00273.html#490399525b1e690ec31d6db964c6b272">tbb::strict_ppl</a>, <a class="el" href="a00274.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
-: <a class="el" href="a00274.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
-: <a class="el" href="a00274.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
-: <a class="el" href="a00274.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
-: <a class="el" href="a00274.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
-: <a class="el" href="a00274.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>set_assertion_handler()
+: <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>
 <hr>
diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html
index 0fa11d7..a2b9cd2 100644
--- a/doc/html/namespaces.html
+++ b/doc/html/namespaces.html
@@ -21,7 +21,7 @@
   </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="a00273.html">tbb::strict_ppl</a></td><td class="indexvalue">For internal use only </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>
 </table>
 <hr>
 <p></p>
diff --git a/examples/common/copy_libraries.bat b/examples/common/copy_libraries.bat
index 2fd9e75..3201273 100644
--- a/examples/common/copy_libraries.bat
+++ b/examples/common/copy_libraries.bat
@@ -36,8 +36,9 @@ if ("%2") == ("debug") set postfix=_debug
 set output_dir=%3
 
 :: 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
+if ("%VS80COMNTOOLS%")  NEQ ("") set vc_dir=vc8
+if ("%VS90COMNTOOLS%")  NEQ ("") set vc_dir=vc9
+if ("%VS100COMNTOOLS%") NEQ ("") set vc_dir=vc10
 
 :: Are we standalone/oss or inside compiler?
 if exist "%TBB30_INSTALL_DIR%\bin\%arch%\vc8\tbb%postfix%.dll" set interim_path=bin\%arch%
diff --git a/examples/parallel_for/polygon_overlay/polymain.cpp b/examples/parallel_for/polygon_overlay/polymain.cpp
index e4e6def..e70e9e7 100644
--- a/examples/parallel_for/polygon_overlay/polymain.cpp
+++ b/examples/parallel_for/polygon_overlay/polymain.cpp
@@ -341,8 +341,7 @@ bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, c
     // *newMap = new vector<RPolygon>;
     *newMap = new Polygon_map_t;
     (*newMap)->reserve(gNPolygons + 1);  // how much bigger does this need to be on average?
-    newPoly = RPolygon::alloc_RPolygon(0,0,xSize-1, ySize-1);
-    (*newMap)->push_back(newPoly);
+    (*newMap)->push_back(RPolygon(0,0,xSize-1, ySize-1));
     for(int i=0; i < gNPolygons; i++) {
         int nX;
         int nY;
@@ -353,8 +352,7 @@ bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, c
         int nR = (maxR * NextRan(1000)) / 999;
         int nG = (maxG * NextRan(1000)) / 999;
         int nB = (maxB * NextRan(1000)) / 999;
-        newPoly = RPolygon::alloc_RPolygon(nX,nY,nX,nY,nR,nG,nB);
-        (*newMap)->push_back(newPoly);
+        (*newMap)->push_back(RPolygon(nX,nY,nX,nY,nR,nG,nB));
         tempMap[nX * ySize + nY] = i+1;     // index of this polygon + 1
     }
     // now have to grow polygons to fill the space.
@@ -374,7 +372,7 @@ bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, c
         int checkSide = validSide[indx];
         int xlow, xhigh, ylow, yhigh;
         int xlnew, xhnew, ylnew, yhnew;
-        (**newMap)[polyIndx]->get(&xlow,&ylow,&xhigh,&yhigh);
+        (**newMap)[polyIndx].get(&xlow,&ylow,&xhigh,&yhigh);
         xlnew = xlow;
         xhnew = xhigh;
         ylnew = ylow; 
@@ -409,7 +407,7 @@ bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, c
             }
         }
         if(okay_to_extend) {
-            (**newMap)[polyIndx]->set(xlnew,ylnew,xhnew,yhnew);
+            (**newMap)[polyIndx].set(xlnew,ylnew,xhnew,yhnew);
             for(int ii = xlow; ii <= xhigh; ii++) {
                 for(int jj=ylow; jj <= yhigh && okay_to_extend; jj++) {
                     tempMap[ii*ySize + jj] = polyIndx;
@@ -450,8 +448,7 @@ bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, c
                 int nR = (maxR * NextRan(1000)) / 999;
                 int nG = (maxG * NextRan(1000)) / 999;
                 int nB = (maxB * NextRan(1000)) / 999;
-                newPoly = RPolygon::alloc_RPolygon(i,j,ilen,jlen,nR,nG,nB);
-                (*newMap)->push_back(newPoly);
+                (*newMap)->push_back(RPolygon(i,j,ilen,jlen,nR,nG,nB));
                 gNPolygons++;
                 for(int ii=i; ii<=ilen;ii++) {
                     for(int jj=j;jj<=jlen;jj++) {
@@ -502,7 +499,7 @@ void CheckPolygonMap(Polygon_map_t *checkMap) {
     // mapXhigh and mapYhigh are inclusive, that is, if the map is 5x5, those values would be 4.
     int mapXhigh, mapYhigh, mapLowX, mapLowY;
     int gMapXSize, gMapYSize;
-    checkMap->at(0)->get(&mapLowX, &mapLowY, &mapXhigh, &mapYhigh);
+    (*checkMap)[0].get(&mapLowX, &mapLowY, &mapXhigh, &mapYhigh);
     if((mapLowX !=0) || (mapLowY != 0)) {
         cout << "checkMap error: map origin not (0,0) (X=" << mapLowX << ", Y=" << mapLowY << ")" << std::endl;
         anError = true;
@@ -525,7 +522,7 @@ void CheckPolygonMap(Polygon_map_t *checkMap) {
 
     int xlow, xhigh, ylow, yhigh;
     for(int p=1; p < int(checkMap->size()) && !anError; p++) {
-        checkMap->at(p)->get(&xlow, &ylow, &xhigh, &yhigh);
+        (*checkMap)[p].get(&xlow, &ylow, &xhigh, &yhigh);
         xRangeCheck("xlow", xlow);
         yRangeCheck("ylow", ylow);
         xRangeCheck("xhigh", xhigh);
@@ -559,11 +556,11 @@ void CheckPolygonMap(Polygon_map_t *checkMap) {
     free(cArray);
 }
 
-bool CompOnePolygon(RPolygon *p1, RPolygon *p2) {
+bool CompOnePolygon(RPolygon &p1, RPolygon &p2) {
     int xl1, xh1, yl1, yh1;
     int xl2, xh2, yl2, yh2;
-    p1->get(&xl1, &yl1, &xh1, &yh1);
-    p2->get(&xl2, &yl2, &xh2, &yh2);
+    p1.get(&xl1, &yl1, &xh1, &yh1);
+    p2.get(&xl2, &yl2, &xh2, &yh2);
     if(yl1>yl2) return true;
     if(yl1<yl2) return false;
     return (xl1 > xl2);
@@ -593,16 +590,16 @@ bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2) {
         t2->push_back(map2->at(i));
     }
     // sort the two created maps by (xlow, ylow)
-    sort(t1->begin(), t1->end(), CompOnePolygon);
-    sort(t2->begin(), t2->end(), CompOnePolygon);
+    sort(t1->begin(), t1->end());
+    sort(t2->begin(), t2->end());
     // compare each element of both maps.
     if(t1->size() != t2->size()) {
         cout << "Error: maps not the same size ( " << int(t1->size()) << " vs " << int(t2->size()) << ")." << std::endl;
     }
     int maxSize = (int)((t1->size() < t2->size()) ? t1->size() : t2->size());
     for(int i=0; i < maxSize; i++) {
-        if(!PolygonsEqual(t1->at(i), t2->at(i))) {
-            cout << "Error: polygons unequal (" << *(t1->at(i)) << " vs " << (*t2->at(i)) << std::endl;
+        if(!PolygonsEqual(&((*t1)[i]), &((*t2)[i]))) {
+            cout << "Error: polygons unequal (" << (*t1)[i] << " vs " << (*t2)[i] << std::endl;
             is_ok = false;
         }
     }
diff --git a/examples/parallel_for/polygon_overlay/polyover.cpp b/examples/parallel_for/polygon_overlay/polyover.cpp
index 99ddfdd..47bbdc9 100644
--- a/examples/parallel_for/polygon_overlay/polyover.cpp
+++ b/examples/parallel_for/polygon_overlay/polyover.cpp
@@ -61,7 +61,7 @@ void OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygo
     int myb=0;
     int p1Area = myPoly->area();
     for(unsigned int j=1; (j < map2->size()) && (p1Area > 0); j++) {
-        RPolygon *p2 = (*map2)[j];
+        RPolygon *p2 = &((*map2)[j]);
         RPolygon *pnew;
         int newxMin, newxMax, newyMin, newyMax;
         myPoly->getColor(&r1, &g1, &b1);
@@ -70,20 +70,13 @@ void OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygo
             myr = r1 + r2;
             myg = g1 + g2;
             myb = b1 + b2;
-            pnew = RPolygon::alloc_RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb);
-            p1Area -= pnew->area(); // when all the area of the polygon is accounted for, we can quit.
+            p1Area -= (newxMax-newxMin+1)*(newyMax - newyMin + 1);
             if(rMutex) {
                 tbb::spin_mutex::scoped_lock lock(*rMutex);
-#if _DEBUG
-                pnew->print(int(resultMap->size()));
-#endif
-                resultMap->push_back(pnew);
+                resultMap->push_back(RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb));
             }
             else {
-#ifdef _DEBUG
-                pnew->print(int(resultMap->size()));
-#endif
-                resultMap->push_back(pnew);
+                resultMap->push_back(RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb));
             }
         }
     }
@@ -99,15 +92,14 @@ void SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_m
     cout << "SerialOverlayMaps called" << std::endl;
     *resultMap = new Polygon_map_t;
 
-    RPolygon *p0 = (*map1)[0];
+    RPolygon *p0 = &((*map1)[0]);
     int mapxSize, mapySize, ignore1, ignore2;
     p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);
     (*resultMap)->reserve(mapxSize*mapySize); // can't be any bigger than this
     // push the map size as the first polygon,
-    p0 = RPolygon::alloc_RPolygon(0,0,mapxSize, mapySize);
-    (*resultMap)->push_back(p0);
+    (*resultMap)->push_back(RPolygon(0,0,mapxSize, mapySize));
     for(unsigned int i=1; i < map1->size(); i++) {
-        RPolygon *p1 = (*map1)[i];
+        RPolygon *p1 = &((*map1)[i]);
         OverlayOnePolygonWithMap(*resultMap, p1, map2, NULL);
     }
 }
@@ -127,7 +119,7 @@ public:
     void operator()( const tbb::blocked_range<int> & r) const {
         PRINT_DEBUG("From " << r.begin() << " to " << r.end());
         for(int i=r.begin(); i != r.end(); i++) {
-            RPolygon *myPoly = (*m_map1)[i];
+            RPolygon *myPoly = &((*m_map1)[i]);
             OverlayOnePolygonWithMap(m_resultMap, myPoly, m_map2, m_rMutex);
         }
     }
@@ -151,7 +143,7 @@ void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, P
     }
     result_map = new Polygon_map_t;
 
-    RPolygon *p0 = polymap1[0];
+    RPolygon *p0 = &(polymap1[0]);
     int mapxSize, mapySize, ignore1, ignore2;
     p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);
     result_map->reserve(mapxSize*mapySize); // can't be any bigger than this
@@ -162,12 +154,11 @@ void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, P
     for(int nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {
         tbb::task_scheduler_init init(nthreads);
         if(gIsGraphicalVersion) {
-            RPolygon *xp = RPolygon::alloc_RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
-            RPolygon::free_RPolygon( xp );
+            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
+            delete xp;
         }
         // put size polygon in result map
-        p0 = RPolygon::alloc_RPolygon(0,0,mapxSize, mapySize);
-        result_map->push_back(p0);
+        result_map->push_back(RPolygon(0,0,mapxSize, mapySize));
 
         tbb::tick_count t0 = tbb::tick_count::now();
         tbb::parallel_for (tbb::blocked_range<int>(1,(int)(polymap1.size()),grain_size), ApplyOverlay(result_map, &polymap1, &polymap2, resultMutex));
@@ -186,9 +177,6 @@ void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, P
         CheckPolygonMap(result_map);
         ComparePolygonMaps(result_map, gResultMap);
 #endif
-        for(int i=0; i<int(result_map->size());i++) {
-            RPolygon::free_RPolygon(result_map->at(i));
-        }
         result_map->clear();
     }
     delete resultMutex;
@@ -198,11 +186,116 @@ void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, P
 // -----------------------------------
 }
 
+template<typename T>
+void split_at( Flagged_map_t& in_map, Flagged_map_t &left_out, Flagged_map_t &right_out, const T median) {
+    left_out.reserve(in_map.size());
+    right_out.reserve(in_map.size());
+    for(Flagged_map_t::iterator i = in_map.begin(); i != in_map.end(); ++i ) {
+        RPolygon *p = i->p();
+        if(p->xmax() < median) {
+            // in left map
+            left_out.push_back(*i);
+        }
+        else if(p->xmin() >= median) {
+            right_out.push_back(*i);
+            // in right map
+        }
+        else {
+            // in both maps.
+            left_out.push_back(*i);
+            right_out.push_back(RPolygon_flagged(p, true));
+        }
+    }
+}
+
+// range that splits the maps as well as the range.  the flagged_map_t are
+// vectors of pointers, and each range owns its maps (has to free them on destruction.)
+template <typename T>
+class blocked_range_with_maps {
+    
+    typedef blocked_range<T> my_range_type;
+
+private:
+
+    my_range_type my_range;
+    Flagged_map_t my_map1;
+    Flagged_map_t my_map2;
+
+public:
+
+    blocked_range_with_maps(
+            T begin, T end, typename my_range_type::size_type my_grainsize,
+            Polygon_map_t *p1, Polygon_map_t *p2
+            )
+        : my_range(begin, end, my_grainsize)
+    {
+        my_map1.reserve(p1->size());
+        my_map2.reserve(p2->size());
+        for(int i=1; i < p1->size(); ++i) {
+            my_map1.push_back(RPolygon_flagged(&((*p1)[i]), false));
+        }
+        for(int i=1; i < p2->size(); ++i) {
+            my_map2.push_back(RPolygon_flagged(&(p2->at(i)), false));
+        }
+    }
+
+    // copy-constructor required for deep copy of flagged maps.  One copy is done at the start of the
+    // parallel for.
+    blocked_range_with_maps(const blocked_range_with_maps& other): my_range(other.my_range), my_map1(other.my_map1), my_map2(other.my_map2) { }
+    bool empty() const { return my_range.empty(); }
+    bool is_divisible() const { return my_range.is_divisible(); }
+
+#if _DEBUG
+    void check_my_map() {
+        assert(my_range.begin() <= my_range.end());
+        for(Flagged_map_t::iterator ci = my_map1.begin(); ci != my_map1.end(); ++ci) {
+            RPolygon *rp = ci->p();
+            assert(rp->xmax() >= my_range.begin());
+            assert(rp->xmin() < my_range.end());
+        }
+        for(Flagged_map_t::iterator ci = my_map2.begin(); ci != my_map2.end(); ++ci) {
+            RPolygon *rp = ci->p();
+            assert(rp->xmax() >= my_range.begin());
+            assert(rp->xmin() < my_range.end());
+        }
+    }
+
+    void dump_map( Flagged_map_t& mapx) {
+        cout << " ** MAP **\n";
+        for( Flagged_map_t::iterator ci = mapx.begin(); ci != mapx.end(); ++ci) {
+            cout << *(ci->p());
+            if(ci->isDuplicate()) {
+                cout << " -- is_duplicate";
+            }
+            cout << "\n";
+        }
+        cout << "\n";
+    }
+#endif
+
+    blocked_range_with_maps(blocked_range_with_maps& lhs_r, split ) : my_range(my_range_type(lhs_r.my_range, split())) {
+        // lhs_r.my_range makes my_range from [median, high) and rhs_r.my_range from [low, median)
+        Flagged_map_t original_map1 = lhs_r.my_map1;
+        Flagged_map_t original_map2 = lhs_r.my_map2;
+        lhs_r.my_map1.clear();
+        lhs_r.my_map2.clear();
+        split_at(original_map1, lhs_r.my_map1, my_map1, my_range.begin());
+        split_at(original_map2, lhs_r.my_map2, my_map2, my_range.begin());
+#if _DEBUG
+        this->check_my_map();
+        lhs_r.check_my_map();
+#endif
+    }
+
+    const my_range_type& range() const { return my_range; }
+    Flagged_map_t& map1() { return my_map1; }
+    Flagged_map_t& map2() { return my_map2; }
+};
+
 /*!
 * @class ApplySplitOverlay
 * @brief parallel by columnar strip
 */
-
 class ApplySplitOverlay {
     Polygon_map_t *m_map1, *m_map2, *m_resultMap;
     tbb::spin_mutex *m_rMutex;
@@ -211,89 +304,24 @@ public:
     * @brief functor for columnar parallel version
     * @param[in] r range of map to be operated on
     */
-    void operator()(const tbb::blocked_range<int> & r) const {
+    void operator()(/*const*/ blocked_range_with_maps<int> & r) const {
 #ifdef _DEBUG
         // if we are debugging, serialize the method.  That way we can
         // see what is happening in each strip without the interleaving
         // confusing things.
         tbb::spin_mutex::scoped_lock lock(*m_rMutex);
-        cout << unitbuf << "From " << r.begin() << " to " << r.end()-1 << std::endl;
+        cout << unitbuf << "From " << r.range().begin() << " to " << r.range().end()-1 << std::endl;
 #endif
-        // instead of handing out subsets of polygons from map1 to intersect
-        // with the polygons in map2, we are handed a strip of the map from
-        // [(r.begin(),0)-(r.end()-1,yMapSize)].
-        //
-        // make a polygon with those values, and intersect with all the polygons
-        // in map1 and map2, creating flagged polygon lists fmap1 and fmap2.
-        // There are four possiblities:
-        //
-        //   1) a polygon is contained entirely within the strip.  We just
-        //      add the polygon to our flagged map.
-        //   2) the polygon will be partly contained in our strip, and partly
-        //      in the strip to our right (higher x values).  Add the polygon
-        //      to our flagged map.
-        //   3) the polygon is partly contained in our map, and partly in the
-        //      strip to our left.  Add the polygon to our map, but flag it as
-        //      a duplicate.
-        //   4) the polygons do not intersect. Don't add to flagged map.
-        //
-
         // get yMapSize
         int r1, g1, b1, r2, g2, b2;
         int myr=-1;
         int myg=-1;
         int myb=-1;
         int i1, i2, i3, yMapSize;
-        m_map1->at(0)->get(&i1, &i2, &i3, &yMapSize);
-        RPolygon *slicePolygon = RPolygon::alloc_RPolygon(r.begin(), 0, r.end() - 1, yMapSize);
-
-        Flagged_map_t *fmap1, *fmap2;
-        fmap1 = new std::vector<RPolygon_flagged>;
-        fmap1->reserve(m_map1->size());
-        fmap2 = new Flagged_map_t;
-        fmap2->reserve(m_map2->size());
-
-        PRINT_DEBUG(std::endl << "Map1 -------------------");
-        for(unsigned int i=1; i<m_map1->size(); i++) {
-            int xl, yl, xh, yh;
-            RPolygon *px = m_map1->at(i);
-            if(PolygonsOverlap(slicePolygon, px, xl, yl, xh, yh)) {
-                bool is_duplicate = false;
-                int pxl, pyl, pxh, pyh;
-                int indx = (int)(fmap1->size());
-                fmap1->resize(indx+1);
-                fmap1->at(indx).setp(px);
-                px->get(&pxl, &pyl, &pxh, &pyh);
-                if(pxl < xl) {
-                    is_duplicate = true;
-                }
-                //fmap1->at(indx).setp(px);
-                fmap1->at(indx).setDuplicate(is_duplicate);
-                PRINT_DEBUG(" Polygon " << *px << " is in map, is_duplicate=" << is_duplicate);
+        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);
 
-            }
-        }
-
-        PRINT_DEBUG(std::endl << "Map2 -------------------");
-
-        for(unsigned int i=1; i<m_map2->size(); i++) {
-            int xl, yl, xh, yh;
-            RPolygon *px = m_map2->at(i);
-
-            if(PolygonsOverlap(slicePolygon, px, xl, yl, xh, yh)) {
-                bool is_duplicate = false;
-                int pxl, pyl, pxh, pyh;
-                int indx = (int)(fmap2->size());
-                fmap2->resize(indx+1);
-                fmap2->at(indx).setp(px);
-                px->get(&pxl, &pyl, &pxh, &pyh);
-                if(pxl < xl) {
-                    is_duplicate = true;
-                }
-                fmap2->at(indx).setDuplicate(is_duplicate);
-                PRINT_DEBUG(" Polygon " << *px << " is in map, is_duplicate=" << is_duplicate);
-            }
-        }
+        Flagged_map_t &fmap1 = r.map1();
+        Flagged_map_t &fmap2 = r.map2();
 
         // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged
         // as duplicate, don't add the result to the output map.  We can still
@@ -301,35 +329,30 @@ public:
         // is left over from intersecting, and quitting when the polygon is
         // used up.
 
-        for(unsigned int ii=0; ii < fmap1->size(); ii++) {
-            RPolygon *p1 = fmap1->at(ii).p();
-            bool is_dup = fmap1->at(ii).isDuplicate();
+        for(unsigned int ii=0; ii < fmap1.size(); ii++) {
+            RPolygon *p1 = fmap1[ii].p();
+            bool is_dup = fmap1[ii].isDuplicate();
             int parea = p1->area();
             p1->getColor(&r1, &g1, &b1);
-            for(unsigned int jj=0;(jj < fmap2->size()) && (parea > 0); jj++) {
+            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {
                 int xl, yl, xh, yh;
-                RPolygon *p2 = fmap2->at(jj).p();
+                RPolygon *p2 = fmap2[jj].p();
                 if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {
-                    if(!(is_dup && fmap2->at(jj).isDuplicate())) {
+                    if(!(is_dup && fmap2[jj].isDuplicate())) {
                         p2->getColor(&r2, &g2, &b2);
                         myr = r1 + r2;
                         myg = g1 + g2;
                         myb = b1 + b2;
-                        RPolygon *pnew = RPolygon::alloc_RPolygon(xl, yl, xh, yh, myr, myg, myb);
 #ifdef _DEBUG
 #else
                         tbb::spin_mutex::scoped_lock lock(*m_rMutex);
 #endif
-                        (*m_resultMap).push_back(pnew);
+                        (*m_resultMap).push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));
                     }
                     parea -= (xh-xl+1)*(yh-yl+1);
                 }
             }
         }
-
-        delete fmap1;
-        delete fmap2;
-        RPolygon::free_RPolygon( slicePolygon );
     }
 
     ApplySplitOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) :
@@ -356,7 +379,7 @@ void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, P
     }
     *result_map = new Polygon_map_t;
 
-    RPolygon *p0 = (*polymap1)[0];
+    RPolygon *p0 = &((*polymap1)[0]);
     int mapxSize, mapySize, ignore1, ignore2;
     p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);
     (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this
@@ -368,18 +391,16 @@ void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, P
 #else
     grain_size = gGrainSize;
 #endif
-
     for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {
         tbb::task_scheduler_init init(nthreads);
         if(gIsGraphicalVersion) {
-            RPolygon *xp = RPolygon::alloc_RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
-            RPolygon::free_RPolygon( xp );
+            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
+            delete xp;
         }
         // push the map size as the first polygon,
-        p0 = RPolygon::alloc_RPolygon(0,0,mapxSize, mapySize);
-        (*result_map)->push_back(p0);
+        (*result_map)->push_back(RPolygon(0,0,mapxSize, mapySize));
         t0 = tbb::tick_count::now();
-        tbb::parallel_for (tbb::blocked_range<int>(0,(int)(mapxSize+1),grain_size), ApplySplitOverlay((*result_map), polymap1, polymap2, resultMutex));
+        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlay((*result_map), polymap1, polymap2, resultMutex));
         t1 = tbb::tick_count::now();
         domainSplitParallelTime = (t1-t0).seconds()*1000;
         cout << "Splitting parallel with spin lock and ";
@@ -394,9 +415,6 @@ void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, P
         CheckPolygonMap(*result_map);
         ComparePolygonMaps(*result_map, gResultMap);
 #endif
-        for(int i=0; i<int((*result_map)->size());i++) {
-            RPolygon::free_RPolygon((*result_map)->at(i));
-        }
         (*result_map)->clear();
 
     }
@@ -404,5 +422,255 @@ void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, P
     if(gCsvFile.is_open()) {
         gCsvFile << std::endl;
     }
+}
+
+class ApplySplitOverlayCV {
+    Polygon_map_t *m_map1, *m_map2;
+    concurrent_Polygon_map_t *m_resultMap;
+public:
+    /*!
+    * @brief functor for columnar parallel version
+    * @param[in] r range of map to be operated on
+    */
+    void operator()(blocked_range_with_maps<int> & r) const {
+        // get yMapSize
+        int r1, g1, b1, r2, g2, b2;
+        int myr=-1;
+        int myg=-1;
+        int myb=-1;
+        int i1, i2, i3, yMapSize;
+        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);
+
+        Flagged_map_t &fmap1 = r.map1();
+        Flagged_map_t &fmap2 = r.map2();
+
+        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged
+        // as duplicate, don't add the result to the output map.  We can still
+        // intersect them, because we are keeping track of how much of the polygon
+        // is left over from intersecting, and quitting when the polygon is
+        // used up.
+
+        for(unsigned int ii=0; ii < fmap1.size(); ii++) {
+            RPolygon *p1 = fmap1[ii].p();
+            bool is_dup = fmap1[ii].isDuplicate();
+            int parea = p1->area();
+            p1->getColor(&r1, &g1, &b1);
+            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {
+                int xl, yl, xh, yh;
+                RPolygon *p2 = fmap2[jj].p();
+                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {
+                    if(!(is_dup && fmap2[jj].isDuplicate())) {
+                        p2->getColor(&r2, &g2, &b2);
+                        myr = r1 + r2;
+                        myg = g1 + g2;
+                        myb = b1 + b2;
+                        (*m_resultMap).push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));
+                    }
+                    parea -= (xh-xl+1)*(yh-yl+1);
+                }
+            }
+        }
+    }
+
+    ApplySplitOverlayCV(concurrent_Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2 ) :
+    m_resultMap(resultMap), m_map1(map1), m_map2(map2) {}
+};
+
+
+/*!
+* @brief intersects two maps strip-wise, accumulating into a concurrent_vector
+*
+* @param[out] resultMap output map (must be allocated)
+* @param[in] polymap1 map to be intersected
+* @param[in] polymap2 map to be intersected
+*/
+void SplitParallelOverlayCV(concurrent_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {
+    int nthreads;
+    bool automatic_threadcount = false;
+    double domainSplitParallelTime;
+    tbb::tick_count t0, t1;
+    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {
+        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;
+        automatic_threadcount = true;
+    }
+    *result_map = new concurrent_Polygon_map_t;
+
+    RPolygon *p0 = &((*polymap1)[0]);
+    int mapxSize, mapySize, ignore1, ignore2;
+    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);
+    // (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this
+
+    int grain_size;
+#ifdef _DEBUG
+    grain_size = gMapXSize / 4;
+#else
+    grain_size = gGrainSize;
+#endif
+    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {
+        tbb::task_scheduler_init init(nthreads);
+        if(gIsGraphicalVersion) {
+            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
+            delete xp;
+        }
+        // push the map size as the first polygon,
+        (*result_map)->push_back(RPolygon(0,0,mapxSize, mapySize));
+        t0 = tbb::tick_count::now();
+        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlayCV((*result_map), polymap1, polymap2));
+        t1 = tbb::tick_count::now();
+        domainSplitParallelTime = (t1-t0).seconds()*1000;
+        cout << "Splitting parallel with concurrent_vector and ";
+        if(automatic_threadcount) cout << "automatic";
+        else cout << nthreads;
+        cout << ((nthreads == 1) ? " thread" : " threads");
+        cout << " took " << domainSplitParallelTime <<  " msec : speedup over serial " << (gSerialTime / domainSplitParallelTime) << std::endl;
+        if(gCsvFile.is_open()) {
+            gCsvFile << "," << domainSplitParallelTime;
+        }
+#if _DEBUG
+        {
+            
+            Polygon_map_t s_result_map;
+            for(concurrent_Polygon_map_t::const_iterator ci = (*result_map)->begin(); ci != (*result_map)->end(); ++ci) {
+                s_result_map.push_back(*ci);
+            }
+            CheckPolygonMap(&s_result_map);
+            ComparePolygonMaps(&s_result_map, gResultMap);
+        }
+#endif
+        (*result_map)->clear();
+
+    }
+
+    if(gCsvFile.is_open()) {
+        gCsvFile << std::endl;
+    }
+
+}
+
+// ------------------------------------------------------
+
+class ApplySplitOverlayETS {
+    Polygon_map_t *m_map1, *m_map2;
+    ETS_Polygon_map_t *m_resultMap;
+public:
+    /*!
+    * @brief functor for columnar parallel version
+    * @param[in] r range of map to be operated on
+    */
+    void operator()(blocked_range_with_maps<int> & r) const {
+        // get yMapSize
+        int r1, g1, b1, r2, g2, b2;
+        int myr=-1;
+        int myg=-1;
+        int myb=-1;
+        int i1, i2, i3, yMapSize;
+        (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize);
+
+        Flagged_map_t &fmap1 = r.map1();
+        Flagged_map_t &fmap2 = r.map2();
+
+        // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged
+        // as duplicate, don't add the result to the output map.  We can still
+        // intersect them, because we are keeping track of how much of the polygon
+        // is left over from intersecting, and quitting when the polygon is
+        // used up.
+
+        for(unsigned int ii=0; ii < fmap1.size(); ii++) {
+            RPolygon *p1 = fmap1[ii].p();
+            bool is_dup = fmap1[ii].isDuplicate();
+            int parea = p1->area();
+            p1->getColor(&r1, &g1, &b1);
+            for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) {
+                int xl, yl, xh, yh;
+                RPolygon *p2 = fmap2[jj].p();
+                if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) {
+                    if(!(is_dup && fmap2[jj].isDuplicate())) {
+                        p2->getColor(&r2, &g2, &b2);
+                        myr = r1 + r2;
+                        myg = g1 + g2;
+                        myb = b1 + b2;
+                        (*m_resultMap).local().push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb));
+                    }
+                    parea -= (xh-xl+1)*(yh-yl+1);
+                }
+            }
+        }
+    }
+
+    ApplySplitOverlayETS(ETS_Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2 ) :
+    m_resultMap(resultMap), m_map1(map1), m_map2(map2) {}
+};
+
+
+/*!
+* @brief intersects two maps strip-wise, accumulating into an ets variable
+*
+* @param[out] resultMap output map (must be allocated)
+* @param[in] polymap1 map to be intersected
+* @param[in] polymap2 map to be intersected
+*/
+void SplitParallelOverlayETS(ETS_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) {
+    int nthreads;
+    bool automatic_threadcount = false;
+    double domainSplitParallelTime;
+    tbb::tick_count t0, t1;
+    if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) {
+        gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic;
+        automatic_threadcount = true;
+    }
+    *result_map = new ETS_Polygon_map_t;
+
+    RPolygon *p0 = &((*polymap1)[0]);
+    int mapxSize, mapySize, ignore1, ignore2;
+    p0->get(&ignore1, &ignore2, &mapxSize, &mapySize);
+    // (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this
+
+    int grain_size;
+#ifdef _DEBUG
+    grain_size = gMapXSize / 4;
+#else
+    grain_size = gGrainSize;
+#endif
+    for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) {
+        tbb::task_scheduler_init init(nthreads);
+        if(gIsGraphicalVersion) {
+            RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
+            delete xp;
+        }
+        // push the map size as the first polygon,
+        // This polygon needs to be first, so we can push it at the start of a combine.
+        // (*result_map)->local.push_back(RPolygon(0,0,mapxSize, mapySize));
+        t0 = tbb::tick_count::now();
+        tbb::parallel_for (blocked_range_with_maps<int>(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlayETS((*result_map), polymap1, polymap2));
+        t1 = tbb::tick_count::now();
+        domainSplitParallelTime = (t1-t0).seconds()*1000;
+        cout << "Splitting parallel with ETS and ";
+        if(automatic_threadcount) cout << "automatic";
+        else cout << nthreads;
+        cout << ((nthreads == 1) ? " thread" : " threads");
+        cout << " took " << domainSplitParallelTime <<  " msec : speedup over serial " << (gSerialTime / domainSplitParallelTime) << std::endl;
+        if(gCsvFile.is_open()) {
+            gCsvFile << "," << domainSplitParallelTime;
+        }
+#if _DEBUG
+        {
+            
+            Polygon_map_t s_result_map;
+            flattened2d<ETS_Polygon_map_t> psv = flatten2d(**result_map);
+            s_result_map.push_back(RPolygon(0,0,mapxSize, mapySize));
+            for(flattened2d<ETS_Polygon_map_t>::const_iterator ci = psv.begin(); ci != psv.end(); ++ci) {
+                s_result_map.push_back(*ci);
+            }
+            CheckPolygonMap(&s_result_map);
+            ComparePolygonMaps(&s_result_map, gResultMap);
+        }
+#endif
+        (*result_map)->clear();
+
+    }
+
+    if(gCsvFile.is_open()) {
+        gCsvFile << std::endl;
+    }
 
 }
diff --git a/examples/parallel_for/polygon_overlay/polyover.h b/examples/parallel_for/polygon_overlay/polyover.h
index f36c886..cca20f6 100644
--- a/examples/parallel_for/polygon_overlay/polyover.h
+++ b/examples/parallel_for/polygon_overlay/polyover.h
@@ -41,6 +41,8 @@ extern void SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Po
 extern void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2);
 
 extern void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);
+extern void SplitParallelOverlayCV(concurrent_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);
+extern void SplitParallelOverlayETS(ETS_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2);
 
 extern void CheckPolygonMap(Polygon_map_t *checkMap);
 extern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2);
diff --git a/examples/parallel_for/polygon_overlay/pover_video.cpp b/examples/parallel_for/polygon_overlay/pover_video.cpp
index d1e2b7d..abcb9a1 100644
--- a/examples/parallel_for/polygon_overlay/pover_video.cpp
+++ b/examples/parallel_for/polygon_overlay/pover_video.cpp
@@ -92,12 +92,12 @@ void pover_video::on_process() {
     gDrawXOffset = map1XLoc;
     gDrawYOffset = map1YLoc;
         for(int i=0; i < int(gPolymap1->size()); i++) {
-            gPolymap1->at(i)->drawPoly();
+            (*gPolymap1)[i].drawPoly();
         }
     gDrawXOffset = map2XLoc;
     gDrawYOffset = map2YLoc;
         for(int i=0; i < int(gPolymap2->size()) ;i++) {
-            gPolymap2->at(i)->drawPoly();
+            (*gPolymap2)[i].drawPoly();
         }
         gDoDraw = true;
 
@@ -105,8 +105,8 @@ void pover_video::on_process() {
     gDrawXOffset = maprXLoc;
     gDrawYOffset = maprYLoc;
     {
-        RPolygon *xp = RPolygon::alloc_RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
-        RPolygon::free_RPolygon( xp );
+        RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0);  // Clear the output space
+        delete xp;
         t0 = tbb::tick_count::now();
         SerialOverlayMaps(&gResultMap, gPolymap1, gPolymap2);
         t1 = tbb::tick_count::now();
@@ -116,9 +116,6 @@ void pover_video::on_process() {
         CheckPolygonMap(gResultMap);
         // keep the map for comparison purposes.
 #else
-        for(int i=0; i<int(gResultMap->size());i++) {
-            RPolygon::free_RPolygon(gResultMap->at(i));
-        }
         delete gResultMap;
 #endif
         if(gCsvFile.is_open()) {
@@ -155,6 +152,27 @@ void pover_video::on_process() {
         }
         SplitParallelOverlay(&resultMap, gPolymap1, gPolymap2);
         delete resultMap;
-        if(gIsGraphicalVersion) rt_sleep(10000);
+        if(gIsGraphicalVersion) rt_sleep(2000);
+    }
+    // split, accumulating into concurrent vector
+    {
+        concurrent_Polygon_map_t *cresultMap;
+        if(gCsvFile.is_open()) {
+            gCsvFile << "Split CV time";
+        }
+        SplitParallelOverlayCV(&cresultMap, gPolymap1, gPolymap2);
+        delete cresultMap;
+        if(gIsGraphicalVersion) rt_sleep(2000);
+    }
+    // split, accumulating into ETS
+    {
+        ETS_Polygon_map_t *cresultMap;
+        if(gCsvFile.is_open()) {
+            gCsvFile << "Split ETS time";
+        }
+        SplitParallelOverlayETS(&cresultMap, gPolymap1, gPolymap2);
+        delete cresultMap;
+        if(gIsGraphicalVersion) rt_sleep(2000);
     }
+    if(gIsGraphicalVersion) rt_sleep(8000);
 }
diff --git a/examples/parallel_for/polygon_overlay/rpolygon.h b/examples/parallel_for/polygon_overlay/rpolygon.h
index 3616b94..ff70bf3 100644
--- a/examples/parallel_for/polygon_overlay/rpolygon.h
+++ b/examples/parallel_for/polygon_overlay/rpolygon.h
@@ -35,6 +35,8 @@
 #include "pover_video.h"
 
 #include "tbb/scalable_allocator.h"
+#include "tbb/concurrent_vector.h"
+#include "tbb/enumerable_thread_specific.h"
 
 using namespace std;
 
@@ -63,38 +65,6 @@ public:
         }
     }
 
-    static RPolygon *alloc_RPolygon(int xMin, int yMin, int xMax, int yMax, int r=-1, int g=-1, int b=-1) {
-        switch(gMBehavior) {
-            case UseScalableAllocator: {
-                RPolygon *my_p = rAlloc.allocate(1);
-                my_p->set_nodraw(xMin,yMin,xMax,yMax);
-                my_p->setColor(r,g,b);
-                if( r >= 0 && gDoDraw) {
-                    my_p->drawPoly();
-                }
-                return my_p;
-            }
-            case UseMalloc: {
-                RPolygon *my_p = new RPolygon(xMin,yMin,xMax,yMax,r,g,b);
-                return my_p;
-            }
-        }
-        return NULL;
-    }
-
-    static void free_RPolygon(RPolygon *p) { 
-        switch(gMBehavior) {
-            case UseScalableAllocator: {
-                rAlloc.deallocate(p, 1);
-                break;
-            }
-            case UseMalloc: {
-                delete p;
-                break;
-            }
-        }
-    }
-
     void set_nodraw(int xMin, int yMin, int xMax, int yMax) {m_XMin=xMin; m_YMin=yMin; m_XMax=xMax; m_YMax=yMax;}
 
     RPolygon &intersect(RPolygon &otherPoly);
@@ -105,6 +75,10 @@ public:
          }
     }
     void get(int *xMin, int *yMin, int *xMax, int *yMax) const {*xMin=m_XMin;*yMin=m_YMin;*xMax=m_XMax;*yMax=m_YMax;}
+    int xmax() const { return m_XMax; }
+    int xmin() const { return m_XMin; }
+    int ymax() const { return m_YMax; }
+    int ymin() const { return m_YMin; }
     void setColor(colorcomp_t newr, colorcomp_t newg, colorcomp_t newb) {m_r = newr; m_g=newg; m_b=newb;}
     void getColor(int *myr, int *myg, int *myb) {*myr=m_r; *myg=m_g; *myb=m_b;}
     color_t myColor() {return gVideo->get_color(m_r, m_g, m_b);}
@@ -126,6 +100,7 @@ public:
             }
         }
     }
+
     int  area() {return ((m_XMax-m_XMin+1)*(m_YMax-m_YMin+1));}
     void print(int i) { cout << "RPolygon " << i << " (" << m_XMin << ", " << m_YMin << ")-(" << m_XMax << ", " << m_YMax << ") " << endl; fflush(stdout);}
 private:
@@ -138,6 +113,16 @@ private:
     colorcomp_t m_b;
 };
 
+#if _MAIN_C_
+bool operator<(const RPolygon& a, const RPolygon& b) {
+    if(a.ymin() > b.ymin()) return false;
+    if(a.ymin() < b.ymin()) return true;
+    return a.xmin() < b.xmin();
+}
+#else
+extern bool operator<(const RPolygon& a, const RPolygon& b);
+#endif
+
 extern ostream& operator<<(ostream& s, const RPolygon &p);
 
 class RPolygon_flagged {
@@ -145,14 +130,17 @@ class RPolygon_flagged {
     bool is_duplicate;
 public:
     RPolygon_flagged() {myPoly = NULL; is_duplicate = false;}
+    RPolygon_flagged(RPolygon* _p, bool _is_duplicate) : myPoly(_p), is_duplicate(_is_duplicate) { }
     bool isDuplicate() {return is_duplicate;}
     void setDuplicate(bool newValue) {is_duplicate = newValue;}
     RPolygon *p() {return myPoly;}
     void setp(RPolygon *newp) {myPoly = newp;}
 };
 
-typedef class vector<RPolygon *> Polygon_map_t;
-typedef class vector<RPolygon_flagged> Flagged_map_t; // we'll make shallow copies
+typedef class vector<RPolygon, RPolygon_allocator> Polygon_map_t;
+typedef class concurrent_vector<RPolygon, RPolygon_allocator> concurrent_Polygon_map_t;
+typedef class enumerable_thread_specific<Polygon_map_t> ETS_Polygon_map_t;
+typedef class vector<RPolygon_flagged, scalable_allocator<RPolygon_flagged> > Flagged_map_t; // we'll make shallow copies
 
 inline bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh) {
     int xl1, yl1, xh1, yh1, xl2, yl2, xh2, yh2;
diff --git a/examples/pipeline/square/square.cpp b/examples/pipeline/square/square.cpp
index 65cf2d2..53a87ad 100644
--- a/examples/pipeline/square/square.cpp
+++ b/examples/pipeline/square/square.cpp
@@ -236,7 +236,7 @@ int run_pipeline( int nthreads )
     MyInputFilter input_filter( input_file );
     pipeline.add_filter( input_filter );
 
-    // Create capitalization stage and add it to the pipeline
+    // Create squaring stage and add it to the pipeline
     MyTransformFilter transform_filter; 
     pipeline.add_filter( transform_filter );
 
diff --git a/examples/task_group/sudoku/index.html b/examples/task_group/sudoku/index.html
index 2ab25dc..110820f 100644
--- a/examples/task_group/sudoku/index.html
+++ b/examples/task_group/sudoku/index.html
@@ -41,6 +41,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
 
 <H2>Usage</H2>
 <DL>
+<DT><TT>sudoku [<I>N</I>]</TT>
 <DT><TT>sudoku <I>inputfile</I> <I>N</I> <I>S</I> [<I>-p</I>]</TT>
 <DD><I>N</I> is the number of threads to be used.
     <I>S</I> is the number of solutions to find: 1 finds the first, any other number will find all solutions.
diff --git a/examples/task_group/sudoku/msvs/sudoku.vcproj b/examples/task_group/sudoku/msvs/sudoku.vcproj
index ac1edcb..9aa1f53 100644
--- a/examples/task_group/sudoku/msvs/sudoku.vcproj
+++ b/examples/task_group/sudoku/msvs/sudoku.vcproj
@@ -1,356 +1,356 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8,00"
-	Name="sudoku"
-	ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411E}"
-	RootNamespace="sudoku"
-	Keyword="Win32Proj"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-		<Platform
-			Name="x64"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
-			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="$(TBB30_INSTALL_DIR)\include"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				TargetMachine="1"
-				FixedBaseAddress="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				Description="Copying DLLs and PDBs"
-				CommandLine="call "$(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"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="$(TBB30_INSTALL_DIR)\include"
-				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				TargetMachine="17"
-				FixedBaseAddress="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				Description="Copying DLLs and PDBs"
-				CommandLine="call "$(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"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="$(TBB30_INSTALL_DIR)\include"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib tbbmalloc.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"
-				FixedBaseAddress="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				Description="Copying DLLs and PDBs"
-				CommandLine="call "$(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"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="$(TBB30_INSTALL_DIR)\include"
-				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="tbb.lib tbbmalloc.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="17"
-				FixedBaseAddress="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				Description="Copying DLLs and PDBs"
-				CommandLine="call "$(TBB30_INSTALL_DIR)\examples\common\copy_libraries.bat"  intel64 release "$(OutDir)""
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath="..\sudoku.cpp"
-				>
-			</File>
-		</Filter>
-		<File
-			RelativePath="..\index.html"
-			>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="sudoku"
+	ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411E}"
+	RootNamespace="sudoku"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="$(TBB30_INSTALL_DIR)\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+				FixedBaseAddress="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Copying DLLs and PDBs"
+				CommandLine="call "$(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"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="$(TBB30_INSTALL_DIR)\include"
+				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="17"
+				FixedBaseAddress="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Copying DLLs and PDBs"
+				CommandLine="call "$(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"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(TBB30_INSTALL_DIR)\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb.lib tbbmalloc.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\ia32\vc_mt;$(TBB30_INSTALL_DIR)\lib\ia32\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+				FixedBaseAddress="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Copying DLLs and PDBs"
+				CommandLine="call "$(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"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="$(TBB30_INSTALL_DIR)\include"
+				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb.lib tbbmalloc.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBB30_INSTALL_DIR)\lib\intel64\vc_mt;$(TBB30_INSTALL_DIR)\lib\intel64\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="17"
+				FixedBaseAddress="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Copying DLLs and PDBs"
+				CommandLine="call "$(TBB30_INSTALL_DIR)\examples\common\copy_libraries.bat"  intel64 release "$(OutDir)""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\sudoku.cpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\index.html"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/examples/task_group/sudoku/msvs/sudoku_cl.sln b/examples/task_group/sudoku/msvs/sudoku_cl.sln
index 8b5504a..176854b 100644
--- a/examples/task_group/sudoku/msvs/sudoku_cl.sln
+++ b/examples/task_group/sudoku/msvs/sudoku_cl.sln
@@ -1,25 +1,25 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sudoku", "sudoku.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
-		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sudoku", "sudoku.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
+		{C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/task_group/sudoku/sudoku.cpp b/examples/task_group/sudoku/sudoku.cpp
index 0949e36..3ba2fa1 100644
--- a/examples/task_group/sudoku/sudoku.cpp
+++ b/examples/task_group/sudoku/sudoku.cpp
@@ -46,7 +46,7 @@ using namespace std;
 atomic<unsigned> nSols;
 unsigned NThreads, NSolutions;
 bool Verbose=false;
-unsigned short init_values[BOARD_SIZE];
+unsigned short init_values[BOARD_SIZE] = {1,0,0,9,0,0,0,8,0,0,8,0,2,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,5,2,1,0,0,4,0,0,0,0,0,0,0,5,0,0,7,4,0,0,7,0,0,0,3,0,0,3,0,0,0,2,0,0,5,0,0,0,0,0,0,1,0,0,5,0,0,0,1,0,0,0,0};
 task_group *g;
 
 typedef struct {
@@ -58,6 +58,10 @@ void read_board(char *filename) {
     FILE *fp;
     int input;
     fp = fopen(filename, "r");
+    if (!fp) { 
+        fprintf(stderr, "sudoku: Could not open input file '%s'.\n", filename);
+        exit(1);
+    }
     for (unsigned i=0; i<BOARD_SIZE; ++i) {
         if (fscanf(fp, "%d", &input))
             init_values[i] = input;
@@ -243,19 +247,27 @@ void partial_solve(board_element *b, unsigned first_potential_set) {
 }
 
 void ParseCommandLine(int argc, char *argv[]) {
-    if (argc < 4) {
+    NThreads = 4;
+    Verbose = true;
+    NSolutions = 2;
+    if (argc != 4 && argc != 5 && argc != 2 && argc != 1) {
         fprintf(stderr, 
-                "Usage: sudoku <inputfilename> <nthreads> <nSolutions> [-p]\n"
-                "  nSolutions=1 stops after finding first solution\n"
-                "    and any other value finds all solutions; \n"
-                "  -p prints the first solution.\n");
+                "Usage: sudoku [<nthreads>]\n"
+                "       sudoku <inputfilename> <nthreads> <nSolutions> [-p]\n"
+                "  where: nSolutions=1 stops after finding first solution\n"
+                "           and any other value finds all solutions; \n"
+                "         -p prints the first solution.\n");
         exit(1);
     }
-    else {
+    if (argc == 2) {
+        sscanf(argv[1], "%d", &NThreads);
+    }
+    else if (argc > 3) {
         sscanf(argv[2], "%d", &NThreads);
         sscanf(argv[3], "%d", &NSolutions);
+        if (argc!=5) Verbose = false;
+        read_board(argv[1]);
     }
-    if (argc==5) Verbose = true;
 }
 
 int main(int argc, char *argv[]) {
@@ -264,7 +276,6 @@ int main(int argc, char *argv[]) {
     NThreads = 1;
     nSols = 0;
     ParseCommandLine(argc, argv);
-    read_board(argv[1]);
     init_board(start_board, init_values);
     task_scheduler_init init(NThreads);
     g = new task_group;
diff --git a/include/tbb/_concurrent_unordered_internal.h b/include/tbb/_concurrent_unordered_internal.h
index 66b0b97..1348d61 100644
--- a/include/tbb/_concurrent_unordered_internal.h
+++ b/include/tbb/_concurrent_unordered_internal.h
@@ -50,7 +50,7 @@
     #pragma warning (pop)
 #endif
 
-#include "tbb_machine.h"
+#include "atomic.h"
 #include "tbb_exception.h"
 #include "tbb_allocator.h"
 
@@ -690,9 +690,11 @@ protected:
     // Constructors/Destructors
     concurrent_unordered_base(size_type n_of_buckets = initial_bucket_number,
         const hash_compare& hc = hash_compare(), const allocator_type& a = allocator_type())
-        : Traits(hc), my_number_of_buckets(n_of_buckets), my_solist(a),
+        : 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");
+        my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)n_of_buckets*2-1); // round up to power of 2
         internal_init();
     }
 
@@ -921,7 +923,7 @@ public:
     }
 
     std::pair<const_iterator, const_iterator> equal_range(const key_type& key) const {
-        return internal_equal_range(key);
+        return const_cast<self_type*>(this)->internal_equal_range(key);
     }
 
     // Bucket interface - for debugging 
@@ -1031,12 +1033,9 @@ public:
     // reflected next time this bucket is touched.
     void rehash(size_type buckets) {
         size_type current_buckets = my_number_of_buckets;
-
-        if (current_buckets > buckets)
+        if (current_buckets >= buckets)
             return;
-        else if ( (buckets & (buckets-1)) != 0 )
-            tbb::internal::throw_exception(tbb::internal::eid_invalid_buckets_number);
-        my_number_of_buckets = buckets;
+        my_number_of_buckets = 1<<__TBB_Log2((uintptr_t)buckets*2-1); // round up to power of 2
     }
 
 private:
@@ -1261,41 +1260,6 @@ private:
         return pairii_t(end(), end());
     }
 
-    // Return the [begin, end) pair of const iterators with the same key values.
-    // This operation makes sense only if mapping is many-to-one.
-    paircc_t internal_equal_range(const key_type& key) const
-    {
-        sokey_t order_key = (sokey_t) my_hash_compare(key);
-        size_type bucket = order_key % my_number_of_buckets;
-
-        // If bucket is empty, initialize it first
-        if (!is_initialized(bucket))
-            return paircc_t(end(), end());
-
-        order_key = split_order_key_regular(order_key);
-        raw_const_iterator end_it = my_solist.raw_end();
-
-        for (raw_const_iterator it = get_bucket(bucket); it != end_it; ++it)
-        {
-            if (solist_t::get_order_key(it) > order_key)
-            {
-                // There is no element with the given key
-                return paircc_t(end(), end());
-            }
-            else if (solist_t::get_order_key(it) == order_key && !my_hash_compare(get_key(*it), key))
-            {
-                const_iterator first = my_solist.get_iterator(it);
-                const_iterator last = first;
-
-                while( last != end() && !my_hash_compare(get_key(*last), key ) )
-                    ++last;
-                return paircc_t(first, last);
-            }
-        }
-
-        return paircc_t(end(), end());
-    }
-
     // Bucket APIs
     void init_bucket(size_type bucket)
     {
@@ -1399,11 +1363,11 @@ private:
     }
 
     // Shared variables
-    size_type                                                     my_number_of_buckets;       // Current table size
+    atomic<size_type>                                             my_number_of_buckets;       // Current table size
     solist_t                                                      my_solist;                  // List where all the elements are kept
     typename allocator_type::template rebind<raw_iterator>::other my_allocator;               // Allocator object for segments
     float                                                         my_maximum_bucket_size;     // Maximum size of the bucket
-    raw_iterator                                                 *my_buckets[pointers_per_table]; // The segment table
+    atomic<raw_iterator*>                                         my_buckets[pointers_per_table]; // The segment table
 };
 #if _MSC_VER
 #pragma warning(pop) // warning 4127 -- while (true) has a constant expression in it
diff --git a/include/tbb/aligned_space.h b/include/tbb/aligned_space.h
index c4b58e5..0d76b3f 100644
--- a/include/tbb/aligned_space.h
+++ b/include/tbb/aligned_space.h
@@ -44,7 +44,7 @@ private:
     element_type array[(sizeof(T)*N+sizeof(element_type)-1)/sizeof(element_type)];
 public:
     //! Pointer to beginning of array
-    T* begin() {return reinterpret_cast<T*>(this);}
+    T* begin() {return internal::punned_cast<T*>(this);}
 
     //! Pointer to one past last element in array.
     T* end() {return begin()+N;}
diff --git a/include/tbb/concurrent_hash_map.h b/include/tbb/concurrent_hash_map.h
index 117d0c7..4c01bde 100644
--- a/include/tbb/concurrent_hash_map.h
+++ b/include/tbb/concurrent_hash_map.h
@@ -133,7 +133,7 @@ namespace interface4 {
         typedef bucket *segment_ptr_t;
         //! Segment pointers table type
         typedef segment_ptr_t segments_table_t[pointers_per_table];
-        //! Hash mask = sum of allocated segments sizes - 1
+        //! Hash mask = sum of allocated segment sizes - 1
         atomic<hashcode_t> my_mask;
         //! Segment pointers table. Also prevents false sharing between my_mask and my_size
         segments_table_t my_table;
@@ -410,10 +410,10 @@ namespace interface4 {
         hash_map_iterator& operator++();
         
         //! Post increment
-        Value* operator++(int) {
-            Value* result = &operator*();
+        hash_map_iterator operator++(int) {
+            hash_map_iterator old(*this);
             operator++();
-            return result;
+            return old;
         }
     };
 
diff --git a/include/tbb/enumerable_thread_specific.h b/include/tbb/enumerable_thread_specific.h
index 668c353..d8d9a23 100644
--- a/include/tbb/enumerable_thread_specific.h
+++ b/include/tbb/enumerable_thread_specific.h
@@ -32,6 +32,7 @@
 #include "concurrent_vector.h"
 #include "tbb_thread.h"
 #include "cache_aligned_allocator.h"
+#include "aligned_space.h"
 #if __SUNPRO_CC
 #include <string.h>  // for memcpy
 #endif
@@ -47,7 +48,7 @@ namespace tbb {
 //! enum for selecting between single key and key-per-instance versions
 enum ets_key_usage_type { ets_key_per_instance, ets_no_key };
 
-namespace interface5 {
+namespace interface6 {
  
     //! @cond
     namespace internal { 
@@ -84,10 +85,7 @@ namespace interface5 {
                 bool match( key_type k ) const {return key==k;}
                 bool claim( key_type k ) {
                     __TBB_ASSERT(sizeof(tbb::atomic<key_type>)==sizeof(key_type), NULL);
-                    __TBB_ASSERT(sizeof(void*)==sizeof(tbb::atomic<key_type>*), NULL);
-                    union { void* space; tbb::atomic<key_type>* key_atomic; } helper;
-                    helper.space = &key;
-                    return helper.key_atomic->compare_and_swap(k,0)==0;
+                    return tbb::internal::punned_cast<tbb::atomic<key_type>*>(&key)->compare_and_swap(k,0)==0;
                 }
             };
 #if __TBB_GCC_3_3_PROTECTED_BROKEN
@@ -232,7 +230,7 @@ namespace interface5 {
                     }
                 }
             }
-        };
+        }
 
         //! Specialization that exploits native TLS 
         template <>
@@ -578,46 +576,73 @@ namespace interface5 {
             return !(i==j);
         }
 
+        template<typename T>
+        struct destruct_only: tbb::internal::no_copy {
+            tbb::aligned_space<T,1> value;
+            ~destruct_only() {value.begin()[0].~T();}
+        };
+
+        template<typename T>
+        struct construct_by_default: tbb::internal::no_assign {
+            void construct(void*where) {new(where) T();} // C++ note: the () in T() ensure zero initialization.
+            construct_by_default( int ) {}
+        };
+
+        template<typename T>
+        struct construct_by_exemplar: tbb::internal::no_assign {
+            const T exemplar;
+            void construct(void*where) {new(where) T(exemplar);}
+            construct_by_exemplar( const T& t ) : exemplar(t) {}
+        };
+
+        template<typename T, typename Finit>
+        struct construct_by_finit: tbb::internal::no_assign {
+            Finit f;
+            void construct(void* where) {new(where) T(f());}
+            construct_by_finit( const Finit& f_ ) : f(f_) {}
+        };
+
         // storage for initialization function pointer
         template<typename T>
-        struct callback_base {
-            virtual T apply( ) = 0;
-            virtual void destroy( ) = 0;
-            // need to be able to create copies of callback_base for copy constructor
-            virtual callback_base* make_copy() = 0;
-            // need virtual destructor to satisfy GCC compiler warning
+        class callback_base {
+        public:
+            // Clone *this
+            virtual callback_base* clone() = 0;
+            // Destruct and free *this
+            virtual void destroy() = 0;
+            // Need virtual destructor to satisfy GCC compiler warning
             virtual ~callback_base() { }
+            // Construct T at where
+            virtual void construct(void* where) = 0;
         };
 
-        template <typename T, typename Functor>
-        struct callback_leaf : public callback_base<T>, public tbb::internal::no_copy {
-            typedef Functor my_callback_type;
-            typedef callback_leaf<T,Functor> my_type;
-            typedef my_type* callback_pointer;
-            typedef typename tbb::tbb_allocator<my_type> my_allocator_type;
-            Functor f;
-            callback_leaf( const Functor& f_) : f(f_) {
-            }
+        template <typename T, typename Constructor>
+        class callback_leaf: public callback_base<T>, Constructor {
+            template<typename X> callback_leaf( const X& x ) : Constructor(x) {}
+
+            typedef typename tbb::tbb_allocator<callback_leaf> my_allocator_type;
 
-            static callback_pointer new_callback(const Functor& f_ ) {
-                void* new_void = my_allocator_type().allocate(1);
-                callback_pointer new_cb = new (new_void) callback_leaf<T,Functor>(f_); // placement new
-                return new_cb;
+            /*override*/ callback_base<T>* clone() {
+                void* where = my_allocator_type().allocate(1);
+                return new(where) callback_leaf(*this);
             }
 
-            /* override */ callback_pointer make_copy() {
-                return new_callback( f );
+            /*override*/ void destroy() {
+                my_allocator_type().destroy(this);
+                my_allocator_type().deallocate(this,1);
             }
 
-             /* override */ void destroy( ) {
-                 callback_pointer my_ptr = this;
-                 my_allocator_type().destroy(my_ptr);
-                 my_allocator_type().deallocate(my_ptr,1);
-             }
-            /* override */ T apply() { return f(); }  // does copy construction of returned value.
+            /*override*/ void construct(void* where) {
+                Constructor::construct(where);
+            }  
+        public:
+            template<typename X>
+            static callback_base<T>* make( const X& x ) {
+                void* where = my_allocator_type().allocate(1);
+                return new(where) callback_leaf(x);
+            }
         };
 
-
         //! Template for adding padding in order to avoid false sharing
         /** ModularSize should be sizeof(U) modulo the cache line size.
             All maintenance of the space will be done explicitly on push_back,
@@ -626,27 +651,9 @@ namespace interface5 {
         */
         template<typename U, size_t ModularSize>
         struct ets_element {
-            char value[sizeof(U) + tbb::internal::NFS_MaxLineSize-ModularSize];
+            char value[ModularSize==0 ? sizeof(U) : sizeof(U)+(tbb::internal::NFS_MaxLineSize-ModularSize)];
             void unconstruct() {
-                // "reinterpret_cast<U*>(&value)->~U();" causes type-punning warning with gcc 4.4,
-                // "U* u = reinterpret_cast<U*>(&value); u->~U();" causes unused variable warning with VS2010.
-                // Thus another "casting via union" hack.
-                __TBB_ASSERT(sizeof(void*)==sizeof(U*),NULL);
-                union { void* space; U* val; } helper;
-                helper.space = &value;
-                helper.val->~U();
-            }
-        };
-
-        //! Partial specialization for case where no padding is needed.
-        template<typename U>
-        struct ets_element<U,0> {
-            char value[sizeof(U)];
-            void unconstruct() { // Same implementation as in general case
-                __TBB_ASSERT(sizeof(void*)==sizeof(U*),NULL);
-                union { void* space; U* val; } helper;
-                helper.space = &value;
-                helper.val->~U();
+                tbb::internal::punned_cast<U*>(&value)->~U();
             }
         };
 
@@ -700,32 +707,7 @@ namespace interface5 {
         typedef typename Allocator::template rebind< padded_element >::other padded_allocator_type;
         typedef tbb::concurrent_vector< padded_element, padded_allocator_type > internal_collection_type;
         
-        internal::callback_base<T> *my_finit_callback;
-
-        // need to use a pointed-to exemplar because T may not be assignable.
-        // using tbb_allocator instead of padded_element_allocator because we may be
-        // copying an exemplar from one instantiation of ETS to another with a different
-        // allocator.
-        typedef typename tbb::tbb_allocator<padded_element > exemplar_allocator_type;
-        static padded_element * create_exemplar(const T& my_value) {
-            padded_element *new_exemplar = reinterpret_cast<padded_element *>(exemplar_allocator_type().allocate(1));
-            new(new_exemplar->value) T(my_value);
-            return new_exemplar;
-        }
-
-        static padded_element *create_exemplar( ) {
-            padded_element *new_exemplar = reinterpret_cast<padded_element *>(exemplar_allocator_type().allocate(1));
-            new(new_exemplar->value) T( );
-            return new_exemplar;
-        }
-
-        static void free_exemplar(padded_element *my_ptr) {
-            my_ptr->unconstruct();
-            exemplar_allocator_type().destroy(my_ptr);
-            exemplar_allocator_type().deallocate(my_ptr,1);
-        }
-
-        padded_element* my_exemplar_ptr;
+        internal::callback_base<T> *my_construct_callback;
 
         internal_collection_type my_locals;
    
@@ -735,14 +717,7 @@ namespace interface5 {
 #else
             void* lref = &*my_locals.push_back(padded_element());
 #endif
-            if(my_finit_callback) {
-                new(lref) T(my_finit_callback->apply());
-            } else if(my_exemplar_ptr) {
-                pointer t_exemp = reinterpret_cast<T *>(&(my_exemplar_ptr->value));
-                new(lref) T(*t_exemp);
-            } else {
-                new(lref) T();
-            }
+            my_construct_callback->construct(lref);
             return lref;
         } 
 
@@ -785,33 +760,25 @@ namespace interface5 {
         typedef generic_range_type< iterator > range_type;
         typedef generic_range_type< const_iterator > const_range_type;
     
-        //! Default constructor, which leads to default construction of local copies
-        enumerable_thread_specific() : my_finit_callback(0) { 
-            my_exemplar_ptr = 0;
-        }
+        //! Default constructor.  Each local instance of T is default constructed.
+        enumerable_thread_specific() : 
+            my_construct_callback( internal::callback_leaf<T,internal::construct_by_default<T> >::make(/*dummy argument*/0) ) 
+        {}
 
-        //! construction with initializer method
-        // Finit should be a function taking 0 parameters and returning a T
+        //! Constructor with initializer functor.  Each local instance of T is constructed by T(finit()).
         template <typename Finit>
-        enumerable_thread_specific( Finit _finit )
-        {
-            my_finit_callback = internal::callback_leaf<T,Finit>::new_callback( _finit );
-            my_exemplar_ptr = 0; // don't need exemplar if function is provided
-        }
+        enumerable_thread_specific( Finit finit ) : 
+            my_construct_callback( internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( finit ) ) 
+        {}
     
-        //! Constuction with exemplar, which leads to copy construction of local copies
-        enumerable_thread_specific(const T &_exemplar) : my_finit_callback(0) {
-            my_exemplar_ptr = create_exemplar(_exemplar);
-        }
+        //! Constuctor with exemplar.  Each local instance of T is copied-constructed from the exemplar.
+        enumerable_thread_specific(const T& exemplar) : 
+            my_construct_callback( internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar ) )
+        {}
     
         //! Destructor
         ~enumerable_thread_specific() { 
-            if(my_finit_callback) {
-                my_finit_callback->destroy();
-            }
-            if(my_exemplar_ptr) {
-                free_exemplar(my_exemplar_ptr);
-            }
+            my_construct_callback->destroy();
             this->clear();  // deallocation before the derived class is finished destructing
             // So free(array *) is still accessible
         }
@@ -886,14 +853,8 @@ namespace interface5 {
         internal_assign(const enumerable_thread_specific<U, A2, C2>& other) {
             if(static_cast<void *>( this ) != static_cast<const void *>( &other )) {
                 this->clear(); 
-                if(my_finit_callback) {
-                    my_finit_callback->destroy();
-                    my_finit_callback = 0;
-                }
-                if(my_exemplar_ptr) {
-                    free_exemplar(my_exemplar_ptr);
-                    my_exemplar_ptr = 0;
-                }
+                my_construct_callback->destroy();
+                my_construct_callback = 0;
                 internal_copy( other );
             }
             return *this;
@@ -916,11 +877,9 @@ namespace interface5 {
         template <typename combine_func_t>
         T combine(combine_func_t f_combine) {
             if(begin() == end()) {
-                if(my_finit_callback) {
-                    return my_finit_callback->apply();
-                }
-                pointer local_ref = reinterpret_cast<T*>((my_exemplar_ptr->value));
-                return T(*local_ref);
+                internal::destruct_only<T> location;
+                my_construct_callback->construct(location.value.begin());
+                return *location.value.begin();
             }
             const_iterator ci = begin();
             T my_result = *ci;
@@ -939,10 +898,12 @@ namespace interface5 {
 
     }; // enumerable_thread_specific
 
-    
     template <typename T, typename Allocator, ets_key_usage_type ETS_key_type> 
     template<typename U, typename A2, ets_key_usage_type C2>
     void enumerable_thread_specific<T,Allocator,ETS_key_type>::internal_copy( const enumerable_thread_specific<U, A2, C2>& other) {
+        // Initialize my_construct_callback first, so that it is valid even if rest of this routine throws an exception.
+        my_construct_callback = other.my_construct_callback->clone();
+
         typedef internal::ets_base<ets_no_key> base;
         __TBB_ASSERT(my_locals.size()==0,NULL);
         this->table_reserve_for_copy( other );
@@ -965,17 +926,6 @@ namespace interface5 {
                 }
             }
         }
-        if(other.my_finit_callback) {
-            my_finit_callback = other.my_finit_callback->make_copy();
-        } else {
-            my_finit_callback = 0;
-        }
-        if(other.my_exemplar_ptr) {
-            pointer local_ref = reinterpret_cast<U*>(other.my_exemplar_ptr->value);
-            my_exemplar_ptr = create_exemplar(*local_ref);
-        } else {
-            my_exemplar_ptr = 0;
-        }
     }
 
     template< typename Container >
@@ -1036,15 +986,15 @@ namespace interface5 {
         return flattened2d<Container>(c);
     }
 
-} // interface5
+} // interface6
 
 namespace internal {
-using interface5::internal::segmented_iterator;
+using interface6::internal::segmented_iterator;
 }
 
-using interface5::enumerable_thread_specific;
-using interface5::flattened2d;
-using interface5::flatten2d;
+using interface6::enumerable_thread_specific;
+using interface6::flattened2d;
+using interface6::flatten2d;
 
 } // namespace tbb
 
diff --git a/include/tbb/machine/linux_ia32.h b/include/tbb/machine/linux_ia32.h
index e0041a1..e247a12 100644
--- a/include/tbb/machine/linux_ia32.h
+++ b/include/tbb/machine/linux_ia32.h
@@ -38,8 +38,7 @@
 #define __TBB_BIG_ENDIAN 0
 
 #define __TBB_release_consistency_helper() __asm__ __volatile__("": : :"memory")
-
-inline void __TBB_rel_acq_fence() { __asm__ __volatile__("mfence": : :"memory"); }
+#define __TBB_full_memory_fence() __asm__ __volatile__("mfence": : :"memory")
 
 #if __TBB_ICC_ASM_VOLATILE_BROKEN
 #define __TBB_VOLATILE
diff --git a/include/tbb/machine/linux_ia64.h b/include/tbb/machine/linux_ia64.h
index cd788fe..4f3801e 100644
--- a/include/tbb/machine/linux_ia64.h
+++ b/include/tbb/machine/linux_ia64.h
@@ -143,10 +143,10 @@ extern "C" {
    it sometimes moves loads over the acquire fence.  The
    fences defined here stop such incorrect code motion. */
 #define __TBB_release_consistency_helper() __asm__ __volatile__("": : :"memory")
-#define __TBB_rel_acq_fence() __asm__ __volatile__("mf": : :"memory")
+#define __TBB_full_memory_fence() __asm__ __volatile__("mf": : :"memory")
 #else
 #define __TBB_release_consistency_helper()
-#define __TBB_rel_acq_fence() __mf()
+#define __TBB_full_memory_fence() __mf()
 #endif /* __INTEL_COMPILER */
 
 // Special atomic functions
diff --git a/include/tbb/machine/linux_intel64.h b/include/tbb/machine/linux_intel64.h
index aa8472c..44b3606 100644
--- a/include/tbb/machine/linux_intel64.h
+++ b/include/tbb/machine/linux_intel64.h
@@ -37,8 +37,9 @@
 
 #define __TBB_release_consistency_helper() __asm__ __volatile__("": : :"memory")
 
-#ifndef __TBB_rel_acq_fence
-inline void __TBB_rel_acq_fence() { __asm__ __volatile__("mfence": : :"memory"); }
+// __TBB_full_memory_fence can be predefined
+#ifndef __TBB_full_memory_fence
+#define __TBB_full_memory_fence() __asm__ __volatile__("mfence": : :"memory")
 #endif
 
 #define __MACHINE_DECL_ATOMICS(S,T,X) \
diff --git a/include/tbb/machine/mac_ppc.h b/include/tbb/machine/mac_ppc.h
index 2487d21..ea935f2 100644
--- a/include/tbb/machine/mac_ppc.h
+++ b/include/tbb/machine/mac_ppc.h
@@ -39,13 +39,13 @@ inline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t
 {
     int32_t result;
 
-    __asm__ __volatile__("sync\n"
+    __asm__ __volatile__("lwsync\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: sync"               /* the exit */
+                         "1: lwsync"               /* the exit */
                           : "=&r"(result), "=m"(* (int32_t*) ptr)
                           : "r"(ptr), "r"(value), "r"(comparand), "m"(* (int32_t*) ptr)
                           : "cr0");
@@ -55,13 +55,13 @@ inline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t
 inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
 {
     int64_t result;
-    __asm__ __volatile__("sync\n"
+    __asm__ __volatile__("lwsync\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: sync"               /* the exit */
+                         "1: lwsync"               /* the exit */
                           : "=&b"(result), "=m"(* (int64_t*) ptr)
                           : "r"(ptr), "r"(value), "r"(comparand), "m"(* (int64_t*) ptr)
                           : "cr0");
@@ -81,5 +81,5 @@ inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t
 #define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
 #define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
 #define __TBB_Yield() sched_yield()
-#define __TBB_rel_acq_fence() __asm__ __volatile__("lwsync": : :"memory")
-#define __TBB_release_consistency_helper() __TBB_rel_acq_fence()
+#define __TBB_full_memory_fence() __asm__ __volatile__("sync": : :"memory")
+#define __TBB_release_consistency_helper() __asm__ __volatile__("lwsync": : :"memory")
diff --git a/include/tbb/machine/sunos_sparc.h b/include/tbb/machine/sunos_sparc.h
index cf90a92..d4cfa7e 100644
--- a/include/tbb/machine/sunos_sparc.h
+++ b/include/tbb/machine/sunos_sparc.h
@@ -40,8 +40,7 @@
 #define __TBB_BIG_ENDIAN 1
 
 #define __TBB_release_consistency_helper() __asm__ __volatile__ ("": : :"memory")
-
-inline void __TBB_rel_acq_fence() { __asm__ __volatile__("membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad": : : "memory"); }
+#define __TBB_full_memory_fence() __asm__ __volatile__("membar #LoadLoad|#LoadStore|#StoreStore|#StoreLoad": : : "memory")
 
 //--------------------------------------------------
 // Compare and swap
diff --git a/include/tbb/machine/windows_ia32.h b/include/tbb/machine/windows_ia32.h
index e6e3fc1..1ef4de4 100644
--- a/include/tbb/machine/windows_ia32.h
+++ b/include/tbb/machine/windows_ia32.h
@@ -40,7 +40,7 @@ extern "C" void _ReadWriteBarrier();
 #error Unsupported compiler - need to define __TBB_release_consistency_helper to support it
 #endif
 
-inline void __TBB_rel_acq_fence() { __asm { __asm mfence } }
+#define __TBB_full_memory_fence() __asm { __asm mfence }
 
 #define __TBB_WORDSIZE 4
 #define __TBB_BIG_ENDIAN 0
diff --git a/include/tbb/machine/windows_intel64.h b/include/tbb/machine/windows_intel64.h
index 8f9b746..1da213b 100644
--- a/include/tbb/machine/windows_intel64.h
+++ b/include/tbb/machine/windows_intel64.h
@@ -44,13 +44,13 @@
 
 #if defined(__INTEL_COMPILER)
 #define __TBB_release_consistency_helper() __asm { __asm nop }
-inline void __TBB_rel_acq_fence() { __asm { __asm mfence } }
+#define __TBB_full_memory_fence() __asm { __asm mfence }
 #elif _MSC_VER >= 1300
 extern "C" void _ReadWriteBarrier();
 #pragma intrinsic(_ReadWriteBarrier)
 #define __TBB_release_consistency_helper() _ReadWriteBarrier()
 #pragma intrinsic(_mm_mfence)
-inline void __TBB_rel_acq_fence() { _mm_mfence(); }
+#define __TBB_full_memory_fence() _mm_mfence()
 #endif
 
 #define __TBB_WORDSIZE 8
diff --git a/include/tbb/machine/xbox360_ppc.h b/include/tbb/machine/xbox360_ppc.h
index 0a3b2ef..85c2933 100644
--- a/include/tbb/machine/xbox360_ppc.h
+++ b/include/tbb/machine/xbox360_ppc.h
@@ -36,12 +36,12 @@
 #include "ppcintrinsics.h"
 
 #if _MSC_VER >= 1300
-extern "C" void _ReadWriteBarrier();
-#pragma intrinsic(_ReadWriteBarrier)
-#define __TBB_release_consistency_helper() _ReadWriteBarrier()
+extern "C" void _MemoryBarrier();
+#pragma intrinsic(_MemoryBarrier)
+#define __TBB_release_consistency_helper() _MemoryBarrier()
 #endif
 
-inline void __TBB_rel_acq_fence() { __lwsync(); }
+#define __TBB_full_memory_fence() __sync()
 
 #define __TBB_WORDSIZE 4
 #define __TBB_BIG_ENDIAN 1
diff --git a/include/tbb/pipeline.h b/include/tbb/pipeline.h
index 508c0e4..04aee63 100644
--- a/include/tbb/pipeline.h
+++ b/include/tbb/pipeline.h
@@ -31,6 +31,7 @@
 
 #include "atomic.h"
 #include "task.h"
+#include "tbb_allocator.h"
 #include <cstddef>
 
 namespace tbb {
@@ -216,7 +217,7 @@ private:
     result_type internal_process_item(bool is_blocking);
 };
 
-//! A processing pipeling that applies filters to items.
+//! A processing pipeline that applies filters to items.
 /** @ingroup algorithms */
 class pipeline {
 public:
@@ -292,6 +293,7 @@ namespace internal {
     template<typename T, typename U, typename Body> class concrete_filter;
 }
 
+//! input_filter control to signal end-of-input for parallel_pipeline
 class flow_control {
     bool is_pipeline_stopped;
     flow_control() { is_pipeline_stopped = false; }
@@ -305,13 +307,18 @@ namespace internal {
 
 template<typename T, typename U, typename Body>
 class concrete_filter: public tbb::filter {
-    Body my_body;
+    const Body& my_body;
+
+    typedef typename tbb::tbb_allocator<U> u_allocator;
+    typedef typename tbb::tbb_allocator<T> t_allocator;
 
     /*override*/ void* operator()(void* input) {
         T* temp_input = (T*)input;
         // Call user's operator()() here
-        void* output = (void*) new U(my_body(*temp_input)); 
-        delete temp_input;
+        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;
     }
 
@@ -321,13 +328,20 @@ public:
 
 template<typename U, typename Body>
 class concrete_filter<void,U,Body>: public filter {
-    Body my_body;
+    const Body& my_body;
+
+    typedef typename tbb::tbb_allocator<U> u_allocator;
 
     /*override*/void* operator()(void*) {
         flow_control control;
-        U temp_output = my_body(control);
-        void* output = control.is_pipeline_stopped ? NULL : (void*) new U(temp_output); 
-        return output;
+        U* output_u = u_allocator().allocate(1);
+        (void) new (output_u) U(my_body(control));
+        if(control.is_pipeline_stopped) {
+            u_allocator().destroy(output_u);
+            u_allocator().deallocate(output_u,1);
+            output_u = NULL;
+        }
+        return (void*)output_u;
     }
 public:
     concrete_filter(tbb::filter::mode filter_mode, const Body& body) : filter(filter_mode), my_body(body) {}
@@ -335,12 +349,15 @@ public:
 
 template<typename T, typename Body>
 class concrete_filter<T,void,Body>: public filter {
-    Body my_body;
+    const Body& my_body;
    
+    typedef typename tbb::tbb_allocator<T> t_allocator;
+
     /*override*/ void* operator()(void* input) {
         T* temp_input = (T*)input;
         my_body(*temp_input);
-        delete temp_input;
+        t_allocator().destroy(temp_input);
+        t_allocator().deallocate(temp_input,1);
         return NULL;
     }
 public:
@@ -349,7 +366,7 @@ public:
 
 template<typename Body>
 class concrete_filter<void,void,Body>: public filter {
-    Body my_body;
+    const Body& my_body;
     
     /** Override privately because it is always called virtually */
     /*override*/ void* operator()(void*) {
@@ -409,7 +426,7 @@ public:
 template<typename T, typename U, typename Body>
 class filter_node_leaf: public filter_node  {
     const tbb::filter::mode mode;
-    const Body& body;
+    const Body body;
     /*override*/void add_to( pipeline& p ) {
         concrete_filter<T,U,Body>* f = new concrete_filter<T,U,Body>(mode,body);
         p.add_filter( *f );
@@ -441,6 +458,7 @@ public:
 } // namespace internal
 //! @endcond
 
+//! Create a filter to participate in parallel_pipeline
 template<typename T, typename U, typename Body>
 filter_t<T,U> make_filter(tbb::filter::mode mode, const Body& body) {
     return new internal::filter_node_leaf<T,U,Body>(mode, body);
diff --git a/include/tbb/tbb_config.h b/include/tbb/tbb_config.h
index 6f26e47..1e11988 100644
--- a/include/tbb/tbb_config.h
+++ b/include/tbb/tbb_config.h
@@ -178,6 +178,12 @@
     #define __TBB_GCC_3_3_PROTECTED_BROKEN 1
 #endif
 
+#if __MINGW32__ && (__GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<2)
+    /** MinGW has a bug with stack alignment for routines invoked from MS RTLs.
+        Since GCC 4.2, the bug can be worked around via a special attribute. **/
+    #define __TBB_SSE_STACK_ALIGNMENT_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. **/
diff --git a/include/tbb/tbb_exception.h b/include/tbb/tbb_exception.h
index 3e1eecd..c16be5e 100644
--- a/include/tbb/tbb_exception.h
+++ b/include/tbb/tbb_exception.h
@@ -94,7 +94,7 @@ enum exception_id {
     eid_operation_not_permitted,
     eid_condvar_wait_failed,
     eid_invalid_load_factor,
-    eid_invalid_buckets_number,
+    eid_reserved, // free slot for backward compatibility, can be reused.
     eid_invalid_swap,
     eid_reservation_length_error,
     eid_invalid_key,
diff --git a/include/tbb/tbb_machine.h b/include/tbb/tbb_machine.h
index aa13065..961f88b 100644
--- a/include/tbb/tbb_machine.h
+++ b/include/tbb/tbb_machine.h
@@ -93,9 +93,23 @@ extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 
 #endif
 
+//! Prerequisites for each architecture port
+/** There are no generic implementation for these macros so they have to be implemented
+    in each machine architecture specific header.
+
+    __TBB_full_memory_fence must prevent all memory operations from being reordered 
+    across the fence. And all such fences must be totally ordered (or sequentially 
+    consistent). These fence must affect both compiler and hardware.
+    
+    __TBB_release_consistency_helper is used to enforce guarantees of acquire or 
+    release semantics in generic implementations of __TBB_load_with_acquire and 
+    __TBB_store_with_release below. Depending on the particular combination of
+    architecture+compiler it can be a hardware fence, a compiler fence, both or
+    nothing. **/
 #if    !defined(__TBB_CompareAndSwap4) \
     || !defined(__TBB_CompareAndSwap8) \
     || !defined(__TBB_Yield)           \
+    || !defined(__TBB_full_memory_fence)    \
     || !defined(__TBB_release_consistency_helper)
 #error Minimal requirements for tbb_machine.h not satisfied 
 #endif
diff --git a/include/tbb/tbb_stddef.h b/include/tbb/tbb_stddef.h
index a4c938e..5230d01 100644
--- a/include/tbb/tbb_stddef.h
+++ b/include/tbb/tbb_stddef.h
@@ -270,6 +270,15 @@ template<typename T>
 inline void poison_pointer( T* ) {/*do nothing*/}
 #endif /* TBB_USE_ASSERT */
 
+//! Cast pointer from U* to T.
+/** This method should be used sparingly as a last resort for dealing with 
+    situations that inherently break strict ISO C++ aliasing rules. */
+template<typename T, typename U> 
+inline T punned_cast( U* ptr ) {
+    uintptr_t x = reinterpret_cast<uintptr_t>(ptr);
+    return reinterpret_cast<T>(x);
+}
+
 //! Base class for types that should not be assigned.
 class no_assign {
     // Deny assignment
diff --git a/src/old/test_task_v2.cpp b/src/old/test_task_v2.cpp
deleted file mode 100644
index fc724cd..0000000
--- a/src/old/test_task_v2.cpp
+++ /dev/null
@@ -1,123 +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.
-*/
-
-// Tests that methods of class task that changed from non-static to static between 
-// TBB 2.2 and TBB 3.0 still work when TBB_DEPRECATED_TASK_INTERFACE is defined.
-
-#define TBB_DEPRECATED_TASK_INTERFACE 1
-#include "tbb/task.h"
-#include "tbb/atomic.h"
-#include "../test/harness_assert.h"
-
-tbb::atomic<int> Sum;
-tbb::atomic<int> DummyCount;
-
-class DummyTask: public tbb::task {
-    tbb::task* execute() {
-        ASSERT(false,"DummyTask should never execute");
-        return NULL;
-    }
-public:
-    //! Used to verify that right task was destroyed
-    bool can_destroy;
-    DummyTask() : can_destroy(false) {
-        ++DummyCount;
-    }
-    ~DummyTask() {
-        ASSERT(can_destroy,"destroyed wrong task?");
-        --DummyCount;
-    }
-};
-
-class ChildTask: public tbb::task {
-public:
-    const int addend;
-    ChildTask( int addend_ ) : addend(addend_) {}
-    tbb::task* execute() {
-        Sum+=addend;
-        return NULL;
-    }
-};
-
-void TestFormallyNonstaticMethods() {
-    // Check signatures
-    void (tbb::task::*d)( tbb::task& ) = &tbb::task::destroy;
-    void (tbb::task::*s)( tbb::task& ) = &tbb::task::spawn;
-    void (tbb::task::*slist)( tbb::task_list& ) = &tbb::task::spawn;
-
-    DummyTask& root = *new( tbb::task::allocate_root() ) DummyTask;
-
-    for( int use_list=0; use_list<2; ++use_list ) {
-        // Note: the cases n=0 is important to check, because spawn(task_list) 
-        // has different logic for the empty case.
-        for( int n=0; n<1000; n=n<5 ? n+1 : n=n+n/5 ) {
-            Sum=0;
-            root.set_ref_count(n+1);
-            if( use_list ) {
-                tbb::task_list list;
-                for( int i=0; i<n; ++i ) {
-                    tbb::task& child = *new( root.allocate_child() ) ChildTask(i+1);
-                    list.push_back(child);
-                }
-                // Spawn the children
-                (root.*slist)(list);
-            } else { 
-                // Do spawning without a list
-                for( int i=0; i<n; ++i ) {
-                    tbb::task& child = *new( root.allocate_child() ) ChildTask(i+1);
-                    // Spawn one child
-                    (root.*s)(child);
-                }
-            }
-            root.wait_for_all();
-            // Check that children ran.
-            ASSERT( Sum==n*(n+1)/2, "child did not run?" );
-        }
-    }
-
-    //! Check method destroy.
-    root.set_ref_count(1);
-    DummyTask& child = *new( root.allocate_child() ) DummyTask;
-    child.can_destroy=true;
-    (root.*d)( child );
-    ASSERT( root.ref_count()==0, NULL );
-    root.can_destroy=true;
-    (root.*d)( root );
-    ASSERT( !DummyCount, "constructor/destructor mismatch" );
-}
-
-#include "tbb/task_scheduler_init.h"
-#include "../test/harness.h"
-
-int TestMain () {
-    for( int p=MinThread; p<=MaxThread; ++p ) {
-        tbb::task_scheduler_init init(p);
-        TestFormallyNonstaticMethods();
-    }
-    return Harness::Done;
-}
diff --git a/src/perf/time_hash_map.cpp b/src/perf/time_hash_map.cpp
index 800a803..10205d5 100644
--- a/src/perf/time_hash_map.cpp
+++ b/src/perf/time_hash_map.cpp
@@ -27,19 +27,22 @@
 */
 
 // configuration:
+#define TBB_USE_THREADING_TOOLS 0
 
 //! enable/disable std::map tests
-#define STDTABLE 1
+#define STDTABLE 0
 
 //! enable/disable old implementation tests (correct include file also)
 #define OLDTABLE 0
-#define OLDTABLEHEADER "tbb/concurrent_hash_map-4078.h"//-4329
+#define OLDTABLEHEADER "tbb/concurrent_hash_map-5468.h"//-4329
 
 //! enable/disable experimental implementation tests (correct include file also)
-
-#define TESTTABLE 0
+#define TESTTABLE 1
 #define TESTTABLEHEADER "tbb/concurrent_unordered_map.h"
 
+//! avoid erase()
+#define TEST_ERASE 0
+
 //////////////////////////////////////////////////////////////////////////////////
 
 #include <cstdlib>
@@ -57,6 +60,7 @@
 #include "tbb/spin_rw_mutex.h"
 #include "tbb/aligned_space.h"
 #include "tbb/atomic.h"
+#include "tbb/_concurrent_unordered_internal.h"
 // for test
 #include "tbb/spin_mutex.h"
 #include "time_framework.h"
@@ -74,43 +78,44 @@ struct IntHashCompare {
 
 namespace version_current {
     namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    namespace tbb { namespace interface5 { using namespace ::tbb::interface5; namespace internal { using namespace ::tbb::interface5::internal; } } }
     #include "tbb/concurrent_hash_map.h"
 }
-typedef version_current::tbb::concurrent_hash_map<int,int,IntHashCompare> IntTable;
+typedef version_current::tbb::concurrent_hash_map<int,int> IntTable;
 
 #if OLDTABLE
 #undef __TBB_concurrent_hash_map_H
 namespace version_base {
     namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    namespace tbb { namespace interface5 { using namespace ::tbb::interface5; namespace internal { using namespace ::tbb::interface5::internal; } } }
     #include OLDTABLEHEADER
 }
-typedef version_base::tbb::concurrent_hash_map<int,int,IntHashCompare> OldTable;
+typedef version_base::tbb::concurrent_hash_map<int,int> OldTable;
 #endif
 
 #if TESTTABLE
 #undef __TBB_concurrent_hash_map_H
 namespace version_new {
     namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    namespace tbb { namespace interface5 { using namespace ::tbb::interface5; namespace internal { using namespace ::tbb::interface5::internal; } } }
     #include TESTTABLEHEADER
 }
-typedef version_new::tbb::concurrent_unordered_map<int,int,IntHashCompare,IntHashCompare> TestTable;
+typedef version_new::tbb::concurrent_unordered_map<int,int> TestTable;
 #define TESTTABLE 1
 #endif
 
 ///////////////////////////////////////
 
 static const char *map_testnames[] = {
-    "1.insert", "2.count(w/rehash)", "3.find/wr", "4.erase"
+    "1.insert", "2.count1st", "3.count2nd", "4.insert existing", "5.erase"
 };
 
 template<typename TableType>
 struct TestTBBMap : TesterBase {
-    typedef typename TableType::accessor accessor;
-    typedef typename TableType::const_accessor const_accessor;
     TableType Table;
     int n_items;
 
-    TestTBBMap() : TesterBase(4) {}
+    TestTBBMap() : TesterBase(4+TEST_ERASE), Table(MaxThread*4) {}
     void init() { n_items = value/threads_count; }
 
     std::string get_name(int testn) {
@@ -122,9 +127,7 @@ struct TestTBBMap : TesterBase {
         switch(test) {
           case 0: // fill
             for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
-                accessor a;
-                Table.insert( a, i );
-                a->second = 0;
+                Table.insert( std::make_pair(i,i) );
             }
             break;
           case 1: // work1
@@ -135,16 +138,20 @@ struct TestTBBMap : TesterBase {
             break;
           case 2: // work2
             for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
-                accessor a;
-                Table.find( a, i );
-                ASSERT( !a->second, "A key should be incremented only once");
-                a->second += 1;
+                Table.count( i );
+            }
+            break;
+          case 3: // work3
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                Table.insert( std::make_pair(i,i) );
             }
             break;
-          case 3: // clean
+#if TEST_ERASE
+          case 4: // clean
             for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
                 ASSERT( Table.erase( i ), NULL);
             }
+#endif
         }
         return 0;
     }
@@ -156,7 +163,7 @@ struct TestSTLMap : TesterBase {
     M mutex;
 
     int n_items;
-    TestSTLMap() : TesterBase(4) {}
+    TestSTLMap() : TesterBase(4+TEST_ERASE) {}
     void init() { n_items = value/threads_count; }
 
     std::string get_name(int testn) {
@@ -182,10 +189,16 @@ struct TestSTLMap : TesterBase {
           case 2: // work2
             for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
                 typename M::scoped_lock with(mutex);
-                Table[i] += 1;
+                Table.count(i);
             }
             break;
-          case 3: // clean
+          case 3: // work3
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                typename M::scoped_lock with(mutex);
+                Table.insert(std::make_pair(i,i));
+            }
+            break;
+          case 4: // clean
             for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
                 typename M::scoped_lock with(mutex);
                 Table.erase(i);
@@ -196,7 +209,6 @@ struct TestSTLMap : TesterBase {
 };
 
 class fake_mutex {
-    int a;
 public:
     class scoped_lock {
         fake_mutex *p;
@@ -204,7 +216,7 @@ public:
     public:
         scoped_lock() {}
         scoped_lock( fake_mutex &m ) { p = &m; }
-        ~scoped_lock() { p->a = 0; }
+        ~scoped_lock() { }
         void acquire( fake_mutex &m ) { p = &m; }
         void release() { }
     };
@@ -228,108 +240,7 @@ public:
 #endif
         end );
         //stat->Print(StatisticsCollector::Stdout);
-        if(value >= 2097152) stat->Print(StatisticsCollector::HTMLFile);
-    }
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////
-template<typename TableType>
-struct TestHashMapFind : TesterBase {
-    typedef typename TableType::accessor accessor;
-    typedef typename TableType::const_accessor const_accessor;
-    TableType Table;
-    int n_items;
-
-    std::string get_name(int testn) {
-        return std::string(!testn?"find":"insert");
-    }
-
-    TestHashMapFind() : TesterBase(2) {}
-    void init() {
-        n_items = value/threads_count;
-        for(int i = 0; i < value; i++) {
-            accessor a; Table.insert( a, i );
-        }
-    }
-
-    double test(int test, int t)
-    {
-        switch(test) {
-          case 0: // find
-            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
-                accessor a;
-                Table.find( a, i );
-                a->second = i;
-            }
-            break;
-          case 1: // insert
-            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
-                accessor a;
-                Table.insert( a, i );
-                a->second = -i;
-            }
-            break;
-        }
-        return 0;
-    }
-};
-
-const int test2_size = 65536;
-int Data[test2_size];
-
-template<typename TableType>
-struct TestHashCountStrings : TesterBase {
-    typedef typename TableType::accessor accessor;
-    typedef typename TableType::const_accessor const_accessor;
-    TableType Table;
-    int n_items;
-
-    std::string get_name(int testn) {
-        return !testn?"insert":"find";
-    }
-
-    TestHashCountStrings() : TesterBase(2) {}
-    void init() {
-        n_items = value/threads_count;
-    }
-
-    double test(int testn, int t)
-    {
-        if(!testn) {
-            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
-                accessor a; Table.insert( a, Data[i] );
-            }
-        } else { // 
-            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
-                accessor a; Table.find( a, Data[i] );
-            }
-        }
-        return 0;
-    }
-};
-
-class test_hash_map_find : public TestProcessor {
-public:
-    test_hash_map_find() : TestProcessor("test_hash_map_find") {}
-    void factory(int value, int threads) {
-        if(Verbose) printf("Processing with %d threads: %d...\n", threads, value);
-        process( value, threads,
-#if OLDTABLE
-            run("Filled old::hashmap", new NanosecPerValue<TestHashMapFind<OldTable> >() ),
-#endif
-            run("Filled tbb::hashmap", new NanosecPerValue<TestHashMapFind<IntTable> >() ),
-#if TESTTABLE
-            run("Filled new::hashmap", new NanosecPerValue<TestHashMapFind<TestTable> >() ),
-#endif
-#if OLDTABLE
-            run("CountStr old::hashmap", new TimeTest<TestHashCountStrings<OldTable> >() ),
-#endif
-            run("CountStr tbb::hashmap", new TimeTest<TestHashCountStrings<IntTable> >() ),
-#if TESTTABLE
-            run("CountStr new::hashmap", new TimeTest<TestHashCountStrings<TestTable> >() ),
-#endif
-        end );
-        //stat->Print(StatisticsCollector::HTMLFile);
+        //if(value >= 2097152) stat->Print(StatisticsCollector::HTMLFile);
     }
 };
 
@@ -344,17 +255,8 @@ int main(int argc, char* argv[]) {
     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");
 
     {
-        test_hash_map_find test_find; int o = test2_size;
-        for(int i = 0; i < o; i++)
-            Data[i] = i%60;
-        for( int t=MinThread; t <= MaxThread; t++)
-            test_find.factory(o, t);
-        test_find.report.SetTitle("Nanoseconds per operation of finding operation (Mode) for %d items", o);
-        test_find.report.Print(StatisticsCollector::HTMLFile|StatisticsCollector::ExcelXML);
-    }
-    {
         test_hash_map the_test;
-        for( int t=MinThread; t <= MaxThread; t*=2)
+        for( int t=MinThread; t <= MaxThread; t++)
             for( int o=/*2048*/(1<<8)*8; o<2200000; o*=2 )
                 the_test.factory(o, t);
         the_test.report.SetTitle("Nanoseconds per operation of (Mode) for N items in container (Name)");
diff --git a/src/perf/time_hash_map_fill.cpp b/src/perf/time_hash_map_fill.cpp
index 53e2115..fff0484 100644
--- a/src/perf/time_hash_map_fill.cpp
+++ b/src/perf/time_hash_map_fill.cpp
@@ -34,14 +34,19 @@ const int INPUT_SIZE = 2000000;
 #define SOURCE_ARRAY UNIQUE_PERCENT(5); UNIQUE_PERCENT(10); UNIQUE_PERCENT(20); UNIQUE_PERCENT(40)
 
 // enable/disable tests for:
-#define BOX1 "TBB"
+#define BOX1 "CHMap"
 #define BOX1TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, 1000000/*ns*/>
 #define BOX1HEADER "tbb/concurrent_hash_map.h"
 
 // enable/disable tests for:
-#define BOX2 "OLD"
-#define BOX2TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, 1000000/*ns*/>
-#define BOX2HEADER "tbb/concurrent_hash_map-5468.h"
+#define BOX2 "CUMap"
+#define BOX2TEST ValuePerSecond<Uniques<tbb::concurrent_unordered_map<int,int> >, 1000000/*ns*/>
+#define BOX2HEADER "tbb/concurrent_unordered_map.h"
+
+// enable/disable tests for:
+//#define BOX3 "OLD"
+#define BOX3TEST ValuePerSecond<Uniques<tbb::concurrent_hash_map<int,int> >, 1000000/*ns*/>
+#define BOX3HEADER "tbb/concurrent_hash_map-5468.h"
 
 #define TBB_USE_THREADING_TOOLS 0
 //////////////////////////////////////////////////////////////////////////////////
@@ -63,6 +68,7 @@ const int INPUT_SIZE = 2000000;
 #include "tbb/spin_rw_mutex.h"
 #include "tbb/aligned_space.h"
 #include "tbb/atomic.h"
+#include "tbb/_concurrent_unordered_internal.h"
 // for test
 #include "tbb/spin_mutex.h"
 #include "time_framework.h"
@@ -80,20 +86,19 @@ int *Data[10];
 // Main test class used to run the timing tests. All overridden methods are called by the framework
 template<typename TableType>
 struct Uniques : TesterBase {
-    typedef typename TableType::accessor accessor;
-    typedef typename TableType::const_accessor const_accessor;
     TableType *Table;
     int n_items;
 
+    // Initializes base class with number of test modes
+    Uniques() : TesterBase(Mixtures+1), Table(0) {}
+    ~Uniques() { if(Table) delete Table; }
+    
     // 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]);
     }
 
-    // Initializes base class with number of test modes
-    Uniques() : TesterBase(Mixtures), Table(0) {}
-    ~Uniques() { if(Table) delete Table; }
-    
     // Informs the class that value and threads number become known
     /*override*/ void init() {
         n_items = value/threads_count;
@@ -102,16 +107,25 @@ struct Uniques : TesterBase {
     // 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 ) return;
+        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
     }
 
     // Executes test mode for a given thread. Return value is ignored when used with timing wrappers.
     /*override*/ double test(int testn, int t)
     {
-        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 != 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) );
+            }
+        } else { // do finds
+            --testn; // on the last dataset
+            for(int i = t*n_items, e = (t+1)*n_items; i < e; i++) {
+                size_t c = Table->count( Data[testn][i] );
+                ASSERT( c == 1, NULL ); // must exist
+            }
         }
         return 0;
     }
@@ -141,6 +155,7 @@ int main(int argc, char* argv[]) {
 
     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
diff --git a/src/perf/time_sandbox.h b/src/perf/time_sandbox.h
index da6bcd9..950e674 100644
--- a/src/perf/time_sandbox.h
+++ b/src/perf/time_sandbox.h
@@ -30,9 +30,20 @@
 #error time_framework.h must be included
 #endif
 
+#define INJECT_TBB namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+#define INJECT_TBB5 namespace tbb { namespace interface5 { using namespace ::tbb::interface5; namespace internal { using namespace ::tbb::interface5::internal; } } }
+
+#ifndef INJECT_BOX_NAMES
+#if defined(__TBB_task_H) || defined(__TBB_concurrent_unordered_internal_H) || defined(__TBB_reader_writer_lock_H)
+#define INJECT_BOX_NAMES INJECT_TBB INJECT_TBB5
+#else
+#define INJECT_BOX_NAMES INJECT_TBB
+#endif
+#endif
+
 #ifdef BOX1
 namespace sandbox1 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX1HEADER
 #   include BOX1HEADER
 #   endif
@@ -41,7 +52,7 @@ namespace sandbox1 {
 #endif
 #ifdef BOX2
 namespace sandbox2 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX2HEADER
 #   include BOX2HEADER
 #   endif
@@ -50,7 +61,7 @@ namespace sandbox2 {
 #endif
 #ifdef BOX3
 namespace sandbox3 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX3HEADER
 #   include BOX3HEADER
 #   endif
@@ -59,7 +70,7 @@ namespace sandbox3 {
 #endif
 #ifdef BOX4
 namespace sandbox4 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX4HEADER
 #   include BOX4HEADER
 #   endif
@@ -68,7 +79,7 @@ namespace sandbox4 {
 #endif
 #ifdef BOX5
 namespace sandbox5 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX5HEADER
 #   include BOX5HEADER
 #   endif
@@ -77,7 +88,7 @@ namespace sandbox5 {
 #endif
 #ifdef BOX6
 namespace sandbox6 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX6HEADER
 #   include BOX6HEADER
 #   endif
@@ -86,7 +97,7 @@ namespace sandbox6 {
 #endif
 #ifdef BOX7
 namespace sandbox7 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX7HEADER
 #   include BOX7HEADER
 #   endif
@@ -95,7 +106,7 @@ namespace sandbox7 {
 #endif
 #ifdef BOX8
 namespace sandbox8 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX8HEADER
 #   include BOX8HEADER
 #   endif
@@ -104,7 +115,7 @@ namespace sandbox8 {
 #endif
 #ifdef BOX9
 namespace sandbox9 {
-    namespace tbb { using namespace ::tbb; namespace internal { using namespace ::tbb::internal; } }
+    INJECT_BOX_NAMES
 #   ifdef BOX9HEADER
 #   include BOX9HEADER
 #   endif
diff --git a/src/tbb/arena.h b/src/tbb/arena.h
index 806c192..30c455a 100644
--- a/src/tbb/arena.h
+++ b/src/tbb/arena.h
@@ -404,7 +404,7 @@ template<bool Spawned> void arena::advertise_new_work() {
         }
         // 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_rel_acq_fence(); 
+        __TBB_full_memory_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 
diff --git a/src/tbb/concurrent_monitor.cpp b/src/tbb/concurrent_monitor.cpp
index c53ef96..3cd5054 100644
--- a/src/tbb/concurrent_monitor.cpp
+++ b/src/tbb/concurrent_monitor.cpp
@@ -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_rel_acq_fence();
+    __TBB_full_memory_fence();
 }
 
 void concurrent_monitor::cancel_wait( thread_context& thr ) {
diff --git a/src/tbb/concurrent_monitor.h b/src/tbb/concurrent_monitor.h
index 379cbeb..8a626a0 100644
--- a/src/tbb/concurrent_monitor.h
+++ b/src/tbb/concurrent_monitor.h
@@ -234,19 +234,19 @@ public:
     void cancel_wait( thread_context& thr );
 
     //! Notify one thread about the event
-    void notify_one() {__TBB_rel_acq_fence(); notify_one_relaxed();}
+    void notify_one() {__TBB_full_memory_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_rel_acq_fence(); notify_all_relaxed();}
+    void notify_all() {__TBB_full_memory_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_rel_acq_fence();notify_relaxed( predicate );}
+    template<typename P> void notify( const P& predicate ) {__TBB_full_memory_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/custom_scheduler.h b/src/tbb/custom_scheduler.h
index 3674096..c56bf54 100644
--- a/src/tbb/custom_scheduler.h
+++ b/src/tbb/custom_scheduler.h
@@ -175,8 +175,13 @@ task* custom_scheduler<SchedulerTraits>::receive_or_steal_task( reference_count&
                 // 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()) )
+            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;
+            }
 #endif /* __TBB_ARENA_PER_MASTER */
             else {
                 // Try to steal a task from a random victim.
@@ -239,8 +244,13 @@ fail:
             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( return_if_no_work && my_arena->is_out_of_work() ) {
+                    if( SchedulerTraits::itt_possible ) {
+                        if( failure_count!=-1 )
+                            ITT_NOTIFY(sync_cancel, this);
+                    }
                     return NULL;
+                }
                 failure_count = yield_threshold;
             }
         }
diff --git a/src/tbb/market.cpp b/src/tbb/market.cpp
index 4a24a8c..f4b033e 100644
--- a/src/tbb/market.cpp
+++ b/src/tbb/market.cpp
@@ -34,6 +34,7 @@
 #include "tbb_main.h"
 #include "governor.h"
 #include "scheduler.h"
+#include "itt_notify.h"
 
 namespace tbb {
 namespace internal {
@@ -210,6 +211,7 @@ void market::acknowledge_close_connection() {
 ::rml::job* market::create_one_job() {
     unsigned index = ++my_num_workers;
     __TBB_ASSERT( index > 0, NULL );
+    ITT_THREAD_SET_NAME(_T("TBB Worker Thread"));
     // index serves as a hint decreasing conflicts between workers when they migrate between arenas
     generic_scheduler* s = generic_scheduler::create_worker( *this, index );
 #if __TBB_TASK_GROUP_CONTEXT
@@ -230,25 +232,21 @@ void market::propagate_cancellation ( task_group_context& ctx ) {
     // See the note 1 at the bottom of this file.
     global_market_mutex_type::scoped_lock lock(theMarketMutex);
     // Advance global cancellation epoch
-    uintptr_t global_epoch = __TBB_FetchAndAddWrelease(&global_cancel_count, 1);
+    __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 ) {
+        if ( s )
             s->propagate_cancellation();
-            s->local_cancel_count = global_epoch;
-        }
     }
     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 ) { 
+        if ( s )
             s->propagate_cancellation();
-            s->local_cancel_count = global_epoch;
-        }
     }
 }
 #endif /* __TBB_TASK_GROUP_CONTEXT */
diff --git a/src/tbb/private_server.cpp b/src/tbb/private_server.cpp
index 61bd127..f6fda67 100644
--- a/src/tbb/private_server.cpp
+++ b/src/tbb/private_server.cpp
@@ -51,7 +51,10 @@ class private_server;
 class private_worker: no_copy {
     //! State in finite-state machine that controls the worker.
     /** State diagram:
-        open --> normal --> quit
+        init --------------------\ 
+          |                      | 
+          V                      V
+        starting --> normal --> quit
           |
           V
         plugged
@@ -59,9 +62,11 @@ class private_worker: no_copy {
     enum state_t {
         //! *this is initialized
         st_init,
+        //! *this has associated thread that is starting up.
+        st_starting,
         //! Associated thread is doing normal life sequence.
         st_normal,
-        //! Associated thread is end normal life sequence.
+        //! Associated thread has ended normal life sequence and promises to never touch *this again.
         st_quit,
         //! Associated thread should skip normal life sequence, because private_server is shutting down.
         st_plugged
@@ -82,7 +87,7 @@ class private_worker: no_copy {
         "my_slack<=0 && my_state==st_normal && I am on server's list of asleep threads" */
     thread_monitor my_thread_monitor;
 
-    //! Link for list of sleeping workers
+    //! Link for list of workers that are sleeping or have no associated thread.
     private_worker* my_next;
 
     friend class private_server;
@@ -90,6 +95,9 @@ class private_worker: no_copy {
     //! Actions executed by the associated thread 
     void run();
 
+    //! Wake up associated thread (or launch a thread if there is none)
+    void wake_or_launch();
+
     //! Called by a thread (usually not the associated thread) to commence termination.
     void start_shutdown();
 
@@ -125,8 +133,13 @@ public:
 
 class private_server: public tbb_server, no_copy {
     tbb_client& my_client;
+    //! Maximum number of threads to be creatd.
+    /** Threads are created lazily, so maximum might not actually be reached. */
     const tbb_client::size_type my_n_thread;
 
+    //! Stack size for each thread. */
+    const size_t my_stack_size;
+
     //! Number of jobs that could use their associated thread minus number of active threads.
     /** If negative, indicates oversubscription.
         If positive, indicates that more threads should run. 
@@ -149,9 +162,13 @@ class private_server: public tbb_server, no_copy {
     atomic<int> my_net_slack_requests;
 #endif /* TBB_USE_ASSERT */
 
-    //! Used for double-check idiom
-    bool has_sleepers() const {
-        return my_asleep_list_root!=NULL;
+    //! Wake up to two sleeping workers, if there are any sleeping.
+    /** The call is used to propagate a chain reaction where each thread wakes up two threads,
+        which in turn each wake up two threads, etc. */
+    void propagate_chain_reaction() {
+        // First test of a double-check idiom.  Second test is inside wake_some(0).
+        if( my_asleep_list_root ) 
+            wake_some(0);
     }
 
     //! Try to add t to list of sleeping workers
@@ -206,6 +223,10 @@ public:
     #pragma warning(push)
     #pragma warning(disable:4189)
 #endif
+#if __MINGW32__ && __GNUC__==4 &&__GNUC_MINOR__>=2
+// ensure that stack is properly aligned for TBB threads
+__attribute__((force_align_arg_pointer))
+#endif
 __RML_DECL_THREAD_ROUTINE private_worker::thread_routine( void* arg ) {
     private_worker* self = static_cast<private_worker*>(arg);
     AVOID_64K_ALIASING( self->my_index );
@@ -222,23 +243,27 @@ __RML_DECL_THREAD_ROUTINE private_worker::thread_routine( void* arg ) {
 
 void private_worker::start_shutdown() {
     state_t s; 
-    // Transition from st_init or st_normal to st_plugged or st_quit
+    // Transition from st_starting or st_normal to st_plugged or st_quit
     do {
         s = my_state;
-        __TBB_ASSERT( s==st_init||s==st_normal, NULL );
-    } while( my_state.compare_and_swap( s==st_init? st_plugged : st_quit, s )!=s );
+        __TBB_ASSERT( s==st_init||s==st_starting||s==st_normal, NULL );
+    } while( my_state.compare_and_swap( s==st_starting? st_plugged : st_quit, s )!=s );
     if( s==st_normal ) {
         // May have invalidated invariant for sleeping, so wake up the thread.
         // Note that the notify() here occurs without maintaining invariants for my_slack.
         // It does not matter, because my_state==st_quit overrides checking of my_slack.
         my_thread_monitor.notify();
-    } 
+    } else if( s==st_init ) {
+        // Perform action that otherwise would be performed by associated thread when it quits.
+        my_server.remove_server_ref();
+    }
 }
 
 void private_worker::run() {
-    if( my_state.compare_and_swap( st_normal, st_init )==st_init ) {
+    my_server.propagate_chain_reaction();
+    state_t s = my_state.compare_and_swap( st_normal, st_starting );
+    if( s==st_starting ) {
         ::rml::job& j = *my_client.create_one_job();
-        --my_server.my_slack;
         while( my_state==st_normal ) {
             if( my_server.my_slack>=0 ) {
                 my_client.process(j);
@@ -249,9 +274,7 @@ void private_worker::run() {
                 // Check/set the invariant for sleeping
                 if( my_state==st_normal && my_server.try_insert_in_asleep_list(*this) ) {
                     my_thread_monitor.commit_wait(c);
-                    // Propagate chain reaction
-                    if( my_server.has_sleepers() )
-                        my_server.wake_some(0);
+                    my_server.propagate_chain_reaction();
                 } else {
                     // Invariant broken
                     my_thread_monitor.cancel_wait();
@@ -259,17 +282,28 @@ void private_worker::run() {
             }
         }
         my_client.cleanup(j);
-        ++my_server.my_slack;
+    } else {
+        // Server is already shutting down.
+        __TBB_ASSERT( s==st_plugged, NULL );
     }
+    ++my_server.my_slack;
     my_server.remove_server_ref();
 }
 
+inline void private_worker::wake_or_launch() {
+    if( my_state==st_init && my_state.compare_and_swap( st_starting, st_init )==st_init )
+        thread_monitor::launch( thread_routine, this, my_server.my_stack_size );
+    else
+        my_thread_monitor.notify();
+}
+
 //------------------------------------------------------------------------
 // Methods of private_server
 //------------------------------------------------------------------------
 private_server::private_server( tbb_client& client ) : 
     my_client(client), 
     my_n_thread(client.max_job_count()),
+    my_stack_size(client.min_stack_size()),
     my_thread_array(NULL) 
 {
     my_ref_count = my_n_thread+1;
@@ -278,13 +312,12 @@ private_server::private_server( tbb_client& client ) :
     my_net_slack_requests = 0;
 #endif /* TBB_USE_ASSERT */
     my_asleep_list_root = NULL;
-    size_t stack_size = client.min_stack_size();
     my_thread_array = tbb::cache_aligned_allocator<padded_private_worker>().allocate( my_n_thread );
     memset( my_thread_array, 0, sizeof(private_worker)*my_n_thread );
-    // FIXME - use recursive chain reaction to launch the threads.
     for( size_t i=0; i<my_n_thread; ++i ) {
         private_worker* t = new( &my_thread_array[i] ) padded_private_worker( *this, client, i ); 
-        thread_monitor::launch( private_worker::thread_routine, t, stack_size );
+        t->my_next = my_asleep_list_root;
+        my_asleep_list_root = t;
     } 
 }
 
@@ -338,7 +371,7 @@ void private_server::wake_some( int additional_slack ) {
     }
 done:
     while( w>wakee ) 
-        (*--w)->my_thread_monitor.notify();
+        (*--w)->wake_or_launch();
 }
 
 void private_server::adjust_job_count_estimate( int delta ) {
diff --git a/src/tbb/scheduler.cpp b/src/tbb/scheduler.cpp
index c57c4b6..d57bcc7 100644
--- a/src/tbb/scheduler.cpp
+++ b/src/tbb/scheduler.cpp
@@ -200,6 +200,9 @@ void generic_scheduler::propagate_cancellation () {
         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
@@ -230,18 +233,6 @@ void generic_scheduler::propagate_cancellation ( task_group_context& ctx ) {
         __TBB_get_object_ref(generic_scheduler, my_node, node).propagate_cancellation();
         node = node->my_next;
     }
-    // Now sync up the local counters
-    for ( size_t i = 0; i < num_workers; ++i ) {
-        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->local_cancel_count = global_cancel_count;
-    }
-    node = the_scheduler_list_head.my_next;
-    while ( node != &the_scheduler_list_head ) {
-        __TBB_get_object_ref(generic_scheduler, my_node, node).local_cancel_count = global_cancel_count;
-        node = node->my_next;
-    }
 }
 #endif /* !__TBB_ARENA_PER_MASTER */
 #endif /* __TBB_TASK_GROUP_CONTEXT */
@@ -333,11 +324,16 @@ void generic_scheduler::cleanup_local_context_list () {
     uintptr_t local_count_snapshot = local_cancel_count;
     local_ctx_list_update = 1;
     {
-        spin_mutex::scoped_lock lock;   // The lock is necessary in acse of a conflict only
-        __TBB_rel_acq_fence();
+        // 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();
         // 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,
+        // 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 ) {
             task_group_context &ctx = __TBB_get_object_ref(task_group_context, my_node, node);
@@ -828,7 +824,7 @@ inline task* generic_scheduler::get_task() {
     task* result = NULL;
 retry:
     --my_arena_slot->tail;
-    __TBB_rel_acq_fence();
+    __TBB_full_memory_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 ) {
@@ -879,7 +875,7 @@ task* generic_scheduler::steal_task( arena_slot& victim_slot ) {
     task* result = NULL;
 retry:
     ++victim_slot.head;
-    __TBB_rel_acq_fence();
+    __TBB_full_memory_fence();
     if ( (intptr_t)victim_slot.head > (intptr_t)victim_slot.tail ) {
         --victim_slot.head;
     }
diff --git a/src/tbb/task.cpp b/src/tbb/task.cpp
index e10401a..f70d44f 100644
--- a/src/tbb/task.cpp
+++ b/src/tbb/task.cpp
@@ -76,35 +76,37 @@ task& allocate_root_with_context_proxy::allocate( size_t size ) const {
     __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) );
-    // The supported usage model prohibits concurrent initial binding. Thus we 
-    // do not need interlocked operations or fences here.
+    // 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 ) {
-            // By not using the fence here we get faster code in case of normal execution 
-            // flow in exchange of a bit higher probability that in cases when cancellation 
-            // is in flight we will take deeper traversal branch. Normally cache coherency 
-            // mechanisms are efficient enough to deliver updated value most of the time.
-            uintptr_t local_count_snapshot = ((generic_scheduler*)my_context.my_owner)->local_cancel_count;
-            __TBB_store_with_release(my_context.my_parent, p.context);
-            uintptr_t global_count_snapshot = __TBB_load_with_acquire(global_cancel_count);
-            if ( !my_context.my_cancellation_requested ) {
-                if ( local_count_snapshot == global_count_snapshot ) {
-                    // It is possible that there is active cancellation request in our 
-                    // parents chain. Fortunately the equality of the local and global 
-                    // counters means that if this is the case it's already been propagated
-                    // to our parent.
-                    my_context.my_cancellation_requested = p.context->my_cancellation_requested;
-                } else {
-                    // Another thread was propagating cancellation request at the moment 
-                    // when we set our parent, but since we do not use locks we could've 
-                    // been skipped. So we have to make sure that we get the cancellation 
-                    // request if one of our ancestors has been canceled.
-                    my_context.propagate_cancellation_from_ancestors();
-                }
+            // 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;
diff --git a/src/tbb/task_group_context.cpp b/src/tbb/task_group_context.cpp
index 3e03187..6a971e9 100644
--- a/src/tbb/task_group_context.cpp
+++ b/src/tbb/task_group_context.cpp
@@ -155,7 +155,7 @@ task_group_context::~task_group_context () {
             // Local update of the context list 
             uintptr_t local_count_snapshot = s->local_cancel_count;
             s->local_ctx_list_update = 1;
-            __TBB_rel_acq_fence();
+            __TBB_full_memory_fence();
             if ( s->nonlocal_ctx_list_update ) {
                 spin_mutex::scoped_lock lock(s->context_list_mutex);
                 my_node.my_prev->my_next = my_node.my_next;
@@ -168,7 +168,7 @@ task_group_context::~task_group_context () {
                 __TBB_store_with_release( s->local_ctx_list_update, 0 );
                 if ( local_count_snapshot != global_cancel_count ) {
                     // Another thread was propagating cancellation request when we removed
-                    // ourselves from the list. We must ensure that it does not access us 
+                    // 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);
@@ -216,12 +216,10 @@ void task_group_context::init () {
         // 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;
-        // The only operation on the thread local list of contexts that may be performed 
-        // concurrently is its traversal by another thread while propagating cancellation
-        // request. Therefore the release fence below is necessary to ensure that the new 
-        // value of my_node.my_next is visible to the traversing thread 
-        // after it reads new value of v->context_list_head.my_next.
         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);
     }
 }
@@ -257,16 +255,16 @@ void task_group_context::reset () {
 }
 
 void task_group_context::propagate_cancellation_from_ancestors () {
-    task_group_context *parent = my_parent;
-    while ( parent && !parent->my_cancellation_requested )
-        parent = parent->my_parent;
-    if ( parent ) {
-        // One of our ancestor groups was canceled. Cancel all its descendants.
+    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 {
-            __TBB_store_with_release(ctx->my_cancellation_requested, 1);
+            ctx->my_cancellation_requested = 1;
             ctx = ctx->my_parent;
-        } while ( ctx != parent );
+        } while ( ctx != ancestor );
     }
 }
 
diff --git a/src/tbb/tbb_misc.cpp b/src/tbb/tbb_misc.cpp
index ae16421..12c7bc0 100644
--- a/src/tbb/tbb_misc.cpp
+++ b/src/tbb/tbb_misc.cpp
@@ -128,7 +128,7 @@ void throw_exception_v4 ( exception_id eid ) {
     case eid_operation_not_permitted: DO_THROW( runtime_error, ("Operation not permitted") );
     case eid_condvar_wait_failed: DO_THROW( runtime_error, ("Wait on condition variable failed") );
     case eid_invalid_load_factor: DO_THROW( out_of_range, ("Invalid hash load factor") );
-    case eid_invalid_buckets_number: DO_THROW( out_of_range, ("Invalid number of buckets") );
+    case eid_reserved: DO_THROW( out_of_range, ("[backward compatibility] Invalid number of buckets") );
     case eid_invalid_swap: DO_THROW( invalid_argument, ("swap() is invalid on non-equal allocators") );
     case eid_reservation_length_error: DO_THROW( length_error, ("reservation size exceeds permitted max size") );
     case eid_invalid_key: DO_THROW( out_of_range, ("invalid key") );
diff --git a/src/tbbmalloc/Customize.h b/src/tbbmalloc/Customize.h
index 900fbbe..2ad17a9 100644
--- a/src/tbbmalloc/Customize.h
+++ b/src/tbbmalloc/Customize.h
@@ -98,6 +98,14 @@ inline intptr_t AtomicCompareExchange( volatile intptr_t& location, intptr_t new
     return __TBB_CompareAndSwapW( &location, new_value, comparand );
 }
 
+inline intptr_t FencedLoad( const volatile intptr_t &location ) {
+    return __TBB_load_with_acquire(location);
+}
+
+inline void FencedStore( volatile intptr_t &location, intptr_t value ) {
+    __TBB_store_with_release(location, value);
+}
+
 #define USE_DEFAULT_MEMORY_MAPPING 1
 
 // To support malloc replacement with LD_PRELOAD
diff --git a/src/tbbmalloc/MemoryAllocator.cpp b/src/tbbmalloc/MemoryAllocator.cpp
index e11620d..482caa3 100644
--- a/src/tbbmalloc/MemoryAllocator.cpp
+++ b/src/tbbmalloc/MemoryAllocator.cpp
@@ -112,11 +112,41 @@ 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
 
-inline bool isMallocInitialized();
-
 class RecursiveMallocCallProtector {
     // pointer to an automatic data of holding thread
     static void       *autoObjPtr;
@@ -126,7 +156,7 @@ class RecursiveMallocCallProtector {
    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(),
+   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.
  */
@@ -135,10 +165,6 @@ class RecursiveMallocCallProtector {
 #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;
@@ -180,7 +206,9 @@ public:
     }
     static bool noRecursion() {
         MALLOC_ASSERT(isMallocInitialized(), 
-                      "Recursion status can be checked only when initialization was done.");
+                      "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
@@ -232,20 +260,22 @@ const uint32_t numLargeBlockBins = 1024; // for 1024 max cached size is near 8MB
  
 /********* The data structures and global objects        **************/
 
-union BackRefIdx { // composite index to backreference array
-    uint32_t t;
-    struct {
-        uint16_t master;   // index in BackRefMaster
-        uint16_t offset;   // offset from beginning of BackRefBlock
-    } s;
+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);
 };
 
-const BackRefIdx invalidIdx = {(uint32_t)-1};
-
-inline bool operator== (const BackRefIdx &idx1, const BackRefIdx &idx2) {
-    return idx1.t == idx2.t;
-}
-
 struct FreeObject {
     FreeObject  *next;
 };
@@ -258,8 +288,6 @@ struct FreeObject {
 
 const int blockHeaderAlignment = 64; // a common size of a cache line
 
-struct Block;
-
 /* The 'next' field in the block header has to maintain some invariants:
  *   it needs to be on a 16K boundary and the first field in the block.
  *   Any value stored there needs to have the lower 14 bits set to 0
@@ -469,31 +497,12 @@ const unsigned cacheCleanupFreq = 256;
  */
 static size_t mmapRequestSize = 0x0100000;
 
-/********** End of numeric parameters controlling allocations *********/
-
-#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( Block* getPublicFreeListBlock(Bin* bin) );
-static NOINLINE( void moveBlockToBinFront(Block *block) );
-static NOINLINE( void processLessUsedBlock(Block *block) );
-
-static ALWAYSINLINE( Bin* getAllocationBin(size_t size) );
-static ALWAYSINLINE( void checkInitialization() );
-
-#undef ALWAYSINLINE
-#undef NOINLINE
-#endif /* !MALLOC_DEBUG */
+/*
+ * 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 **********/
 
@@ -810,7 +819,6 @@ static int mallocBigBlock()
  * Forward Refs
  */
 static Block *getEmptyBlock(size_t size);
-static BackRefIdx newBackRef();
 static void setBackRef(BackRefIdx backRefIdx, void *newPtr);
 static void removeBackRef(BackRefIdx backRefIdx);
 
@@ -971,7 +979,7 @@ static void outofTLSBin (Bin* bin, Block* block)
 /*
  * Return the bin for the given size. If the TLS bin structure is absent, create it.
  */
-static Bin* getAllocationBin(size_t size)
+inline Bin* getAllocationBin(size_t size)
 {
     TLSData* tls = getThreadMallocTLS();
     if( !tls ) {
@@ -1368,8 +1376,8 @@ static Block *getEmptyBlock(size_t size)
     if (tls)
         result = tls->pool.getBlock();
     if (!result) {
-        BackRefIdx backRefIdx = newBackRef();
-        if (backRefIdx == invalidIdx || !(result = getRawBlock(/*startup=*/false)))
+        BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/false);
+        if (backRefIdx.isInvalid() || !(result = getRawBlock(/*startup=*/false)))
             return NULL;
         setBackRef(backRefIdx, result);
         result->backRefIdx = backRefIdx;
@@ -1459,8 +1467,8 @@ static StartupBlock *firstStartupBlock;
 
 static StartupBlock *getNewStartupBlock()
 {
-    BackRefIdx backRefIdx = newBackRef();
-    if (backRefIdx == invalidIdx) return NULL;
+    BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/false);
+    if (backRefIdx.isInvalid()) return NULL;
 
     StartupBlock *block = (StartupBlock *)getRawBlock(/*startup=*/true);
     if (!block) return NULL;
@@ -1655,22 +1663,22 @@ BackRefBlock *BackRefMaster::findFreeBlock()
 static inline void *getBackRef(BackRefIdx backRefIdx)
 {
     // !backRefMaster means no initialization done, so it can't be valid memory
-    if (!backRefMaster || backRefIdx.s.master > backRefMaster->lastUsed
-        || backRefIdx.s.offset >= BR_MAX_CNT) 
+    if (!backRefMaster || backRefIdx.getMaster() > backRefMaster->lastUsed
+        || backRefIdx.getOffset() >= BR_MAX_CNT) 
         return NULL;
-    return *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.s.master]
-                     + sizeof(BackRefBlock)+backRefIdx.s.offset*sizeof(void*));
+    return *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]
+                     + sizeof(BackRefBlock)+backRefIdx.getOffset()*sizeof(void*));
 }
 
 static void setBackRef(BackRefIdx backRefIdx, void *newPtr)
 {
-    MALLOC_ASSERT(backRefIdx.s.master<=backRefMaster->lastUsed && backRefIdx.s.offset<BR_MAX_CNT,
+    MALLOC_ASSERT(backRefIdx.getMaster()<=backRefMaster->lastUsed && backRefIdx.getOffset()<BR_MAX_CNT,
                   ASSERT_TEXT);
-    *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.s.master]
-              + sizeof(BackRefBlock) + backRefIdx.s.offset*sizeof(void*)) = newPtr;
+    *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]
+              + sizeof(BackRefBlock) + backRefIdx.getOffset()*sizeof(void*)) = newPtr;
 }
 
-static BackRefIdx newBackRef()
+BackRefIdx BackRefIdx::newBackRef(bool largeObj)
 {
     BackRefBlock *blockToUse;
     void **toUse;
@@ -1682,7 +1690,7 @@ static BackRefIdx newBackRef()
 
             MALLOC_ASSERT(backRefMaster, ASSERT_TEXT);
             if (! (blockToUse = backRefMaster->findFreeBlock()))
-                return invalidIdx;
+                return BackRefIdx();
         }
         toUse = NULL;
         { // the block is locked to find a reference
@@ -1706,19 +1714,24 @@ static BackRefIdx newBackRef()
                 blockToUse->allocatedCount++;
         } // end of lock scope
     } while (!toUse);
-    res.s.master = blockToUse->myNum;
-    res.s.offset = 
+    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.s.master<=backRefMaster->lastUsed 
-                  && backRefIdx.s.offset<BR_MAX_CNT, ASSERT_TEXT);
-    BackRefBlock *currBlock = backRefMaster->backRefBl[backRefIdx.s.master];
+    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.s.offset*sizeof(void*));
+                                        + backRefIdx.getOffset()*sizeof(void*));
     {
         MallocMutex::scoped_lock lock(currBlock->blockMutex);
 
@@ -1749,10 +1762,14 @@ static void removeBackRef(BackRefIdx backRefIdx)
  * In theory, we only need values 0 and 2. But value 1 is nonetheless
  * useful for detecting errors in the double-check pattern.
  */
-static int mallocInitialized;   // implicitly initialized to 0
-static MallocMutex initAndShutMutex;
+static intptr_t mallocInitialized;   // implicitly initialized to 0
+static MallocMutex initMutex;
 
-inline bool isMallocInitialized() { return 2 == mallocInitialized; }
+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;
@@ -1790,10 +1807,9 @@ static void initMemoryManager()
 //! Ensures that initMemoryManager() is called once and only once.
 /** Does not return until initMemoryManager() has been completed by a thread.
     There is no need to call this routine if mallocInitialized==2 . */
-static void checkInitialization()
+static void doInitialization()
 {
-    if (mallocInitialized==2) return;
-    MallocMutex::scoped_lock lock( initAndShutMutex );
+    MallocMutex::scoped_lock lock( initMutex );
     if (mallocInitialized!=2) {
         MALLOC_ASSERT( mallocInitialized==0, ASSERT_TEXT );
         mallocInitialized = 1;
@@ -1806,7 +1822,9 @@ static void checkInitialization()
         RecursiveMallocCallProtector::detectNaiveOverload();
 #endif
         MALLOC_ASSERT( mallocInitialized==1, ASSERT_TEXT );
-        mallocInitialized = 2;
+        // 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 */
 }
@@ -1901,10 +1919,35 @@ void CachedBlocksList::releaseLastIfOld(uintptr_t currAge, size_t size)
     }
 }
 
-/* A predicate checks whether an object starts on blockSize boundary */
-static inline unsigned int isLargeObject(void *object)
+
+/* 
+ * 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)
 {
-    return isAligned(object, blockSize);
+    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 ()
@@ -1963,7 +2006,8 @@ static inline void* mallocLargeObject (size_t size, size_t alignment,
     if (startupAlloc || !(lmb = getCachedLargeBlock(allocationSize))) {
         BackRefIdx backRefIdx;
 
-        if ((backRefIdx = newBackRef()) == invalidIdx) return NULL;
+        if ((backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/true)).isInvalid()) 
+            return NULL;
         lmb = (LargeMemoryBlock*)getRawMemory(allocationSize, /*useMapMem=*/startupAlloc);
         if (!lmb) return NULL;
         lmb->fromMapMemory = startupAlloc;
@@ -2004,7 +2048,7 @@ static inline void freeLargeObject (void *object)
     LargeObjectHdr *header = (LargeObjectHdr*)object - 1;
 
     // overwrite backRefIdx to simplify double free detection
-    header->backRefIdx = invalidIdx;
+    header->backRefIdx = BackRefIdx();
     if (!freeLargeObjectToCache(header->memoryBlock)) {
         removeBackRef(header->memoryBlock->backRefIdx);
         freeRawMemory(header->memoryBlock, header->memoryBlock->unalignedSize, 
@@ -2112,7 +2156,7 @@ static void *allocateAligned(size_t size, size_t alignment)
     void *result;
     if (size<=maxSegregatedObjectSize && alignment<=maxSegregatedObjectSize)
         result = scalable_malloc(alignUp(size? size: sizeof(size_t), alignment));
-    else if (alignment<=fittingAlignment)
+    else if (size<minLargeObjectSize && alignment<=fittingAlignment)
         result = scalable_malloc(size);
     else if (size+alignment < minLargeObjectSize) {
         void *unaligned = scalable_malloc(size+alignment);
@@ -2120,12 +2164,11 @@ static void *allocateAligned(size_t size, size_t alignment)
         result = alignUp(unaligned, alignment);
     } else {
         /* This can be the first allocation call. */
-        checkInitialization();
-        /* To correctly detect kind of allocation in scalable_free we need 
-           to distinguish memory allocated as large object.
-           This is done via alignment that is greater than can be found in Block.
-        */ 
-        result = mallocLargeObject(size, blockSize>alignment? blockSize: alignment);
+        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 );
@@ -2181,6 +2224,78 @@ static inline FreeObject *findAllocatedObject(const void *address, const Block *
     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
 
@@ -2209,10 +2324,8 @@ extern "C" void mallocThreadShutdownNotification(void* arg)
     Block *threadlessBlock;
     unsigned int index;
 
-    {
-        MallocMutex::scoped_lock lock( initAndShutMutex );
-        if ( mallocInitialized == 0 ) return;
-    }
+    // Check whether TLS has been initialized
+    if (!isMallocInitialized()) return;
 
     TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return start %d\n",
              getThreadId(),  threadGoingDownCount++ ));
@@ -2268,43 +2381,6 @@ extern "C" void mallocProcessShutdownNotification(void)
 #endif
 }
 
-/**** Check if an object was allocated by scalable_malloc ****/
-
-/* 
- * 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 = invalidIdx;
-    }
-#endif
-    return id;
-}
-
-static inline bool isRecognized (void* ptr)
-{
-    void* expected;
-    BackRefIdx* idx;
-
-    if (isLargeObject(ptr)) {
-        expected = (LargeObjectHdr*)ptr - 1;
-        idx = &((LargeObjectHdr*)expected)->backRefIdx;
-    } else {
-        expected = alignDown(ptr, blockSize);
-        idx = &((Block*)expected)->backRefIdx;
-    }
-    return expected == getBackRef(safer_dereference(idx));
-}
-
 /********* The malloc code          *************/
 
 extern "C" void * scalable_malloc(size_t size)
@@ -2324,14 +2400,14 @@ extern "C" void * scalable_malloc(size_t size)
     }
 #endif
 
-    /* This returns only after malloc is initialized */
-    checkInitialization();
+    if (!isMallocInitialized()) 
+        doInitialization();
 
     /*
      * Use Large Object Allocation
      */
     if (size >= minLargeObjectSize) {
-        result = (FreeObject*)mallocLargeObject(size, blockSize);
+        result = (FreeObject*)mallocLargeObject(size, largeObjectAlignment);
         if (!result) errno = ENOMEM;
         return result;
     }
@@ -2420,72 +2496,15 @@ extern "C" void * scalable_malloc(size_t size)
 /********* The free code            *************/
 
 extern "C" void scalable_free (void *object) {
-    Block *block;
-    ThreadId myTid;
-    FreeObject *objectToFree;
-
-    if (!object) {
+    if (!object)
         return;
-    }
+
     MALLOC_ASSERT(isRecognized(object), "Invalid pointer in scalable_free detected.");
 
-    if (isLargeObject(object)) {
+    if (isLargeObject(object))
         freeLargeObject(object);
-        return;
-    } 
-
-    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
-
-    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);
-    }
+    else
+        freeSmallObject(object);
 }
 
 /*
@@ -2497,8 +2516,12 @@ extern "C" void safer_scalable_free (void *object, void (*original_free)(void*))
     if (!object)
         return;
 
-    if (isRecognized(object))
-        scalable_free(object);
+    // 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);
 }
diff --git a/src/tbbmalloc/tbbmalloc.cpp b/src/tbbmalloc/tbbmalloc.cpp
index 1b4b3ba..fff8bb1 100644
--- a/src/tbbmalloc/tbbmalloc.cpp
+++ b/src/tbbmalloc/tbbmalloc.cpp
@@ -136,9 +136,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_PTHREAD
-    dlopen(MALLOCLIB_NAME, RTLD_NOW);
-#elif USE_WINTHREAD
+#if USE_WINTHREAD
     // Prevent Windows from displaying message boxes if it fails to load library
     UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
     LoadLibrary(MALLOCLIB_NAME);
@@ -148,6 +146,12 @@ void init_tbbmalloc() {
 
 #if !(_WIN32||_WIN64)
 struct RegisterProcessShutdownNotification {
+    RegisterProcessShutdownNotification() {
+#if USE_PTHREAD
+        // prevents unloading, POSIX case
+        dlopen(MALLOCLIB_NAME, RTLD_NOW);
+#endif
+    }
     ~RegisterProcessShutdownNotification() {
         mallocProcessShutdownNotification();
     }
diff --git a/src/test/harness_m128.h b/src/test/harness_m128.h
index 62053b2..88cd15c 100644
--- a/src/test/harness_m128.h
+++ b/src/test/harness_m128.h
@@ -36,6 +36,8 @@
 /** Uses circuitous logic forces compiler to put __m128 objects on stack while
     executing various methods, and thus tempt it to use aligned loads and stores
     on the stack. */
+//  Do not create file-scope objects of the class, because MinGW (as of May 2010)
+//  did not always provide proper stack alignment in destructors of such objects.
 class ClassWithSSE {
     static const int n = 16;
     __m128 field[n];
@@ -66,7 +68,7 @@ void ClassWithSSE::init( int start ) {
     __m128 stack[n];
     for( int i=0; i<n; ++i ) {
         // Declaring value as a one-element array instead of a scalar quites 
-        // gratuitous about possible use of "value" before it is used.
+        // gratuitous warnings about possible use of "value" before it was set.
         __m128 value[1];
         for( int j=0; j<4; ++j )
             ((float*)value)[j] = float(n*start+4*i+j);
diff --git a/src/test/harness_report.h b/src/test/harness_report.h
index 034f958..455c44b 100644
--- a/src/test/harness_report.h
+++ b/src/test/harness_report.h
@@ -56,6 +56,10 @@
 #include <cstdarg>
 
 
+#ifdef HARNESS_INCOMPLETE_SOURCES
+#error Source files are not complete. Check the build environment
+#endif
+
 #if _MSC_VER
     #define snprintf _snprintf
 #if _MSC_VER<=1400
diff --git a/src/test/test_concurrent_hash_map.cpp b/src/test/test_concurrent_hash_map.cpp
index caeb12d..df99252 100644
--- a/src/test/test_concurrent_hash_map.cpp
+++ b/src/test/test_concurrent_hash_map.cpp
@@ -402,9 +402,9 @@ void TraverseTable( MyTable& table, size_t n, size_t expected_size ) {
         ASSERT(std::distance(cer.first, cer.second) == 1, NULL);
 
         // Check const_iterator
-        ASSERT( ci->first.value_of()==k, NULL );
-        ASSERT( (*ci).first.value_of()==k, NULL );
-        ++ci;
+        MyTable::const_iterator cic = ci++;
+        ASSERT( cic->first.value_of()==k, NULL );
+        ASSERT( (*cic).first.value_of()==k, NULL );
     }
     ASSERT( ci==const_table.end(), NULL );
     delete[] array;
@@ -792,10 +792,10 @@ void TestRehash() {
     MyTable w;
     w.insert( std::make_pair(MyKey::make(-5), MyData()) );
     w.rehash(); // without this, assertion will fail
-    MyTable::const_iterator it = w.begin();
+    MyTable::iterator it = w.begin();
     int i = 0; // check for non-rehashed buckets
-    for( ; it != w.end(); ++it, i++ )
-        w.count( it->first );
+    for( ; it != w.end(); i++ )
+        w.count( (it++)->first );
     ASSERT( i == 1, NULL );
     for( i=0; i<1000; i=(i<29 ? i+1 : i*2) ) {
         for( int j=max(256+i, i*2); j<10000; j*=3 ) {
diff --git a/src/test/test_concurrent_unordered.cpp b/src/test/test_concurrent_unordered.cpp
index d781e6b..ff1bc1d 100644
--- a/src/test/test_concurrent_unordered.cpp
+++ b/src/test/test_concurrent_unordered.cpp
@@ -410,13 +410,24 @@ void CheckRange( AtomicByte array[], int n ) {
 }
 
 template<typename T>
+class CheckTable: NoAssign {
+    T &table;
+public:
+    CheckTable(T &t) : NoAssign(), table(t) {}
+    void operator()(int i) const {
+        int c = (int)table.count( i );
+        ASSERT( c, "must exist" );
+    }
+};
+
+template<typename T>
 void test_concurrent(const char *tablename) {
-    T table;
 #if TBB_USE_ASSERT
     int items = 2000;
 #else
     int items = 100000;
 #endif
+    T table(items/1000);
     tbb::tick_count t0 = tbb::tick_count::now();
     NativeParallelFor( 16/*min 6*/, FillTable<T>(table, items) );
     tbb::tick_count t1 = tbb::tick_count::now();
@@ -437,9 +448,10 @@ void test_concurrent(const char *tablename) {
     ASSERT(items == CheckRecursiveRange<typename T::const_iterator>(cr).first, NULL);
     tbb::parallel_for( cr, ParallelTraverseBody<typename T::const_range_type>( array, items ));
     CheckRange( array, items );
-
     delete[] array;
 
+    tbb::parallel_for( 0, items, CheckTable<T>( table ) );
+  
     table.clear();
     CheckAllocatorA(table, items+1, items); // one dummy is always allocated
 }
diff --git a/src/test/test_enumerable_thread_specific.cpp b/src/test/test_enumerable_thread_specific.cpp
index 4f040c1..f15223b 100644
--- a/src/test/test_enumerable_thread_specific.cpp
+++ b/src/test/test_enumerable_thread_specific.cpp
@@ -34,6 +34,7 @@
 #include "tbb/tick_count.h"
 #include "tbb/tbb_allocator.h"
 #include "tbb/tbb_thread.h"
+#include "tbb/atomic.h"
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     // Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers
@@ -108,6 +109,9 @@ struct test_helper<minimal<N> > {
    static inline double get(const minimal<N> &sum ) { return static_cast<double>(sum.value()); }
 };
 
+//! Tag class used to make certain constructors hard to invoke accidentally.
+struct SecretTagType {} SecretTag;
+
 //// functors and routines for initialization and combine
 
 // Addition
@@ -128,13 +132,23 @@ struct FunctorAddCombineRef<minimal<N> > {
     }
 };
 
+//! Counts instances of FunctorFinit
+static tbb::atomic<int> FinitCounter;
+
 template <typename T, int Value>
-struct FunctorFinit {
+class FunctorFinit {
+public:
+    FunctorFinit( const FunctorFinit& ) {++FinitCounter;}
+    FunctorFinit( SecretTagType ) {++FinitCounter;}
+    ~FunctorFinit() {--FinitCounter;}
     T operator()() { return Value; }
 };
 
 template <size_t N, int Value>
 struct FunctorFinit<minimal<N>,Value> {
+    FunctorFinit( const FunctorFinit& ) {++FinitCounter;}
+    FunctorFinit( SecretTagType ) {++FinitCounter;}
+    ~FunctorFinit() {--FinitCounter;}
     minimal<N> operator()() {   
         minimal<N> result;
         result.set_value( Value );
@@ -261,7 +275,7 @@ void run_parallel_scalar_tests_nocombine(const char *test_name) {
             static_sums.clear();
 
             ets_type sums(exemplar);
-            FunctorFinit<T,0> my_finit;
+            FunctorFinit<T,0> my_finit(SecretTag);
             ets_type finit_ets(my_finit);
 
             ASSERT( sums.empty(), NULL);
@@ -920,7 +934,7 @@ run_assign_and_copy_constructor_test(const char *test_name) {
     ASSERT(7 == test_helper<T>::get(assign1.local()), NULL);
 
     // test creation with finit function
-    FunctorFinit<T,7> my_finit7;
+    FunctorFinit<T,7> my_finit7(SecretTag);
     tbb::enumerable_thread_specific<T> create2(my_finit7);
     (void) create2.local();
     ASSERT(7 == test_helper<T>::get(create2.local()), NULL);
@@ -933,7 +947,7 @@ run_assign_and_copy_constructor_test(const char *test_name) {
 
     // test copy assignment with function initializer
     create2.clear();
-    FunctorFinit<T,0> my_finit;
+    FunctorFinit<T,0> my_finit(SecretTag);
     tbb::enumerable_thread_specific<T> assign2(my_finit);
     assign2 = create2;
     (void) assign2.local();
@@ -949,9 +963,47 @@ run_assignment_and_copy_constructor_tests() {
     run_assign_and_copy_constructor_test<minimal<line_size-1> >("minimal<line_size-1>");
     run_assign_and_copy_constructor_test<minimal<line_size> >("minimal<line_size>");
     run_assign_and_copy_constructor_test<minimal<line_size+1> >("minimal<line_size+1>");
+    ASSERT(FinitCounter==0, NULL);
+}
+
+// Class with no default constructor
+class HasNoDefaultConstructor {
+    HasNoDefaultConstructor();
+public:
+    HasNoDefaultConstructor( SecretTagType ) {}
+};
+
+// Initialization functor for a HasNoDefaultConstructor
+struct HasNoDefaultConstructorFinit {
+    HasNoDefaultConstructor operator()() {
+        return HasNoDefaultConstructor(SecretTag);
+    }
+};
+
+struct HasNoDefaultConstructorCombine {
+    HasNoDefaultConstructor operator()( HasNoDefaultConstructor, HasNoDefaultConstructor ) {
+        return HasNoDefaultConstructor(SecretTag);
+    }
+};
+
+//! Test situations where only default constructor or copy constructor is required.
+void TestInstantiation() {
+    // Test instantiation is possible when copy constructor is not required.
+    tbb::enumerable_thread_specific<NoCopy> ets1;
+
+    // Test instantiation when default constructor is not required, because exemplar is provided.
+    HasNoDefaultConstructor x(SecretTag);
+    tbb::enumerable_thread_specific<HasNoDefaultConstructor> ets2(x);
+    ets2.combine(HasNoDefaultConstructorCombine());
+
+    // Test instantiation when default constructor is not required, because init function is provided.
+    HasNoDefaultConstructorFinit f;
+    tbb::enumerable_thread_specific<HasNoDefaultConstructor> ets3(f);
+    ets3.combine(HasNoDefaultConstructorCombine());
 }
 
 int TestMain () {
+    TestInstantiation();
     run_segmented_iterator_tests();
     flog_key_creation_and_deletion();
 
diff --git a/include/tbb/aligned_space.h b/src/test/test_malloc_atexit.cpp
similarity index 54%
copy from include/tbb/aligned_space.h
copy to src/test/test_malloc_atexit.cpp
index c4b58e5..27cc0db 100644
--- a/include/tbb/aligned_space.h
+++ b/src/test/test_malloc_atexit.cpp
@@ -26,30 +26,62 @@
     the GNU General Public License.
 */
 
-#ifndef __TBB_aligned_space_H
-#define __TBB_aligned_space_H
-
-#include "tbb_stddef.h"
-#include "tbb_machine.h"
-
-namespace tbb {
-
-//! Block of space aligned sufficiently to construct an array T with N elements.
-/** The elements are not constructed or destroyed by this class.
-    @ingroup memory_allocation */
-template<typename T,size_t N>
-class aligned_space {
-private:
-    typedef __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;
-    element_type array[(sizeof(T)*N+sizeof(element_type)-1)/sizeof(element_type)];
-public:
-    //! Pointer to beginning of array
-    T* begin() {return reinterpret_cast<T*>(this);}
+/* Regression test against bug in TBB allocator, manifested when 
+   dynamic library calls atexit or register dtors of static objects.
+   If the allocator is not initialized yet, we can got deadlock, 
+   because allocator library has static object dtors as well, they
+   registred during allocator initialization, and atexit is protected 
+   by non-recursive mutex in some GLIBCs.
+ */
+
+#if _USRDLL
+
+#include <stdlib.h>
+
+#if _WIN32||_WIN64
+// isMallocOverloaded must be defined in DLL to linker not drop the dependence
+// to the DLL.
+extern __declspec(dllexport) bool isMallocOverloaded();
+
+bool isMallocOverloaded()
+{
+    return true;
+}
+
+#else
+
+#include <dlfcn.h>
 
-    //! Pointer to one past last element in array.
-    T* end() {return begin()+N;}
+bool isMallocOverloaded()
+{
+    return dlsym(RTLD_DEFAULT, "__TBB_malloc_proxy");
+}
+
+#endif    
+
+void dummyFunction() {}
+
+class Foo {
+public:
+    Foo() {
+         // need a lot of them to cause memory allocation
+        for (int i=0; i<1024; i++)
+            atexit(dummyFunction);
+    }
 };
 
-} // namespace tbb 
+static Foo f;
+
+#else // _USRDLL
+#include "harness.h"
+
+#if _WIN32||_WIN64
+extern __declspec(dllimport)
+#endif
+bool isMallocOverloaded();
+
+int TestMain () {
+    return isMallocOverloaded()? Harness::Done : Harness::Skipped;
+}
 
-#endif /* __TBB_aligned_space_H */
+#endif // _USRDLL
diff --git a/src/test/test_malloc_compliance.cpp b/src/test/test_malloc_compliance.cpp
index a25bd0d..2ccc0eb 100644
--- a/src/test/test_malloc_compliance.cpp
+++ b/src/test/test_malloc_compliance.cpp
@@ -756,7 +756,9 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
                     if (errno != 0 && !known_issue) {
                         CountErrors++;
                         if (ShouldReportError()) REPORT("valid pointer returned, error: errno not kept\n");
-                    }      
+                    }
+                    // newly allocated area have to be zeroed
+                    memset((char*)tmp + PointerList[i].Size, 0, PointerList[i].Size);
                     PointerList[i].Pointer = tmp;
                     PointerList[i].Size *= 2;
                 }
diff --git a/src/test/test_malloc_init_shutdown.cpp b/src/test/test_malloc_init_shutdown.cpp
new file mode 100644
index 0000000..76a33ac
--- /dev/null
+++ b/src/test/test_malloc_init_shutdown.cpp
@@ -0,0 +1,100 @@
+/*
+    Copyright 2005-2010 Intel Corporation.  All Rights Reserved.
+
+    This file is part of Threading Building Blocks.
+
+    Threading Building Blocks is free software; you can redistribute it
+    and/or modify it under the terms of the GNU General Public License
+    version 2 as published by the Free Software Foundation.
+
+    Threading Building Blocks is distributed in the hope that it will be
+    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with Threading Building Blocks; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    As a special exception, you may use this file as part of a free software
+    library without restriction.  Specifically, if other files instantiate
+    templates or use macros or inline functions from this file, or you compile
+    this file and link it with other files to produce an executable, this
+    file does not by itself cause the resulting executable to be covered by
+    the GNU General Public License.  This exception does not however
+    invalidate any other reasons why the executable file might be covered by
+    the GNU General Public License.
+*/
+
+/*--------------------------------------------------------------------*/
+// 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"
+
+tbb::atomic<int> FinishedTasks;
+
+class TestFunc {
+	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;
+	}
+};
+
+typedef NativeParallelForTask<bool,TestFunc> TestTask;
+const int MaxTasks = 16;
+
+int TestMain () {
+    int NTasks = min(MaxTasks, max(2, MaxThread));
+    Harness::SpinBarrier barr(NTasks);
+    TestFunc tf(barr);
+    FinishedTasks = 0;
+    tbb::aligned_space<TestTask,MaxTasks> tasks;
+
+    for(int i=0; i<NTasks; ++i) {
+        TestTask* t = tasks.begin()+i;
+        new(t) TestTask(i%2==0, tf);
+        t->start();
+    }
+    
+    Harness::Sleep(1000); // wait a second :)
+    ASSERT( FinishedTasks==NTasks, "Some threads appear to deadlock" );
+
+    for(int i=0; i<NTasks; ++i) {
+        TestTask* t = tasks.begin()+i;
+        t->wait_to_finish();
+        t->~TestTask();
+    }
+
+    return Harness::Done;
+}
diff --git a/src/test/test_malloc_overload.cpp b/src/test/test_malloc_overload.cpp
index 5bd7df2..19f5cc2 100644
--- a/src/test/test_malloc_overload.cpp
+++ b/src/test/test_malloc_overload.cpp
@@ -99,12 +99,20 @@ static inline bool isAligned(T arg, uintptr_t alignment) {
 
 /* Below is part of MemoryAllocator.cpp. */
 
-union BackRefIdx { // index to backreference array
-    uint32_t t;
-    struct {
-        uint16_t master;  // index in BackRefMaster
-        uint16_t offset;  // offset from beginning of BackRefBlock
-    } s;
+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() { 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 {
diff --git a/src/test/test_malloc_regression.cpp b/src/test/test_malloc_regression.cpp
index 6123f7c..7e25440 100644
--- a/src/test/test_malloc_regression.cpp
+++ b/src/test/test_malloc_regression.cpp
@@ -49,9 +49,11 @@ void RunThread(const Body& body, const Arg& arg) {
     job.wait_to_finish();
 }
 
+/*--------------------------------------------------------------------*/
+// The regression test against bug #1518 where thread boot strap allocations "leaked"
+
 #include "harness_memory.h"
 
-// The regression test for bug #1518 where thread boot strap allocations "leaked"
 bool TestBootstrapLeak() {
     /* In the bug 1518, each thread leaked ~384 bytes.
        Initially, scalable allocator maps 1MB. Thus it is necessary to take out most of this space.
@@ -98,6 +100,9 @@ bool TestBootstrapLeak() {
     return memory_leak<=0;
 }
 
+/*--------------------------------------------------------------------*/
+// The regression test against a bug with incompatible semantics of msize and realloc
+
 bool TestReallocMsize(size_t startSz) {
     bool passed = true;
 
@@ -121,12 +126,16 @@ bool TestReallocMsize(size_t startSz) {
     return passed;
 }
 
+/*--------------------------------------------------------------------*/
+// The main test function
+
 int TestMain () {
     bool passed = true;
     // Check whether memory usage data can be obtained; if not, skip test_bootstrap_leak.
     if( GetMemoryUsage() )
         passed &= TestBootstrapLeak();
 
+    // TestReallocMsize runs for each power of 2 and each Fibonacci number below 64K
     for (size_t a=1, b=1, sum=1; sum<=64*1024; ) {
         passed &= TestReallocMsize(sum);
         a = b;
diff --git a/src/test/test_malloc_whitebox.cpp b/src/test/test_malloc_whitebox.cpp
index 3056eee..c37b85f 100644
--- a/src/test/test_malloc_whitebox.cpp
+++ b/src/test/test_malloc_whitebox.cpp
@@ -35,7 +35,9 @@
 #undef DO_ITT_NOTIFY
 #endif
 
+#define private public
 #include "MemoryAllocator.cpp" // can be in ../tbbmalloc or another directory
+#undef private
 #include "../tbbmalloc/tbbmalloc.cpp"
 
 const int LARGE_MEM_SIZES_NUM = 10;
@@ -175,7 +177,7 @@ public:
         TestBlock blocks[ITERS];
 
         for (int i=0; i<ITERS; i++) {
-            blocks[i].idx = newBackRef();
+            blocks[i].idx = BackRefIdx::newBackRef(/*largeObj=*/false);
             setBackRef(blocks[i].idx, &blocks[i].data);
         }
         for (int i=0; i<ITERS; i++)
@@ -245,6 +247,8 @@ void TestObjectRecognition() {
     size_t obtainedSize;
     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);
@@ -260,7 +264,7 @@ void TestObjectRecognition() {
     headerLO->memoryBlock = (LargeMemoryBlock*)bufferLOH;
     headerLO->memoryBlock->unalignedSize = 2*blockSize + headersSize;
     headerLO->memoryBlock->objectSize = blockSize + headersSize;
-    headerLO->backRefIdx = newBackRef();
+    headerLO->backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/true);
     setBackRef(headerLO->backRefIdx, headerLO);
     ASSERT(scalable_msize(falseLO) == blockSize + headersSize,
            "Error in test: LOH falsification failed");
@@ -270,17 +274,22 @@ void TestObjectRecognition() {
     BackRefIdx idxs[NUM_OF_IDX];
     for (int cnt=0; cnt<2; cnt++) {
         for (int master = -10; master<10; master++) {
-            falseBlock->backRefIdx.s.master = (uint16_t)master;
-            headerLO->backRefIdx.s.master = (uint16_t)master;
+            falseBlock->backRefIdx.master = (uint16_t)master;
+            headerLO->backRefIdx.master = (uint16_t)master;
         
             for (int bl = -10; bl<BR_MAX_CNT+10; bl++) {
-                falseBlock->backRefIdx.s.offset = (uint16_t)bl;
-                headerLO->backRefIdx.s.offset = (uint16_t)bl;
-                
-                obtainedSize = safer_scalable_msize(falseSO, NULL);
-                ASSERT(obtainedSize==0, "Incorrect pointer accepted");
-                obtainedSize = safer_scalable_msize(falseLO, NULL);
-                ASSERT(obtainedSize==0, "Incorrect pointer accepted");
+                falseBlock->backRefIdx.offset = (uint16_t)bl;
+                headerLO->backRefIdx.offset = (uint16_t)bl;
+
+                for (int largeObj = 0; largeObj<2; largeObj++) {
+                    falseBlock->backRefIdx.largeObj = largeObj;
+                    headerLO->backRefIdx.largeObj = largeObj;
+
+                    obtainedSize = safer_scalable_msize(falseSO, NULL);
+                    ASSERT(obtainedSize==0, "Incorrect pointer accepted");
+                    obtainedSize = safer_scalable_msize(falseLO, NULL);
+                    ASSERT(obtainedSize==0, "Incorrect pointer accepted");
+                }
             }
         }
         if (cnt == 1) {
@@ -289,7 +298,7 @@ void TestObjectRecognition() {
             break;
         }
         for (int i=0; i<NUM_OF_IDX; i++) {
-            idxs[i] = newBackRef();
+            idxs[i] = BackRefIdx::newBackRef(/*largeObj=*/false);
             setBackRef(idxs[i], NULL);
         }
     }
@@ -307,7 +316,7 @@ void TestObjectRecognition() {
 
 int TestMain () {
     // backreference requires that initialization was done
-    checkInitialization();
+    if(!isMallocInitialized()) doInitialization();
      // to succeed, leak detection must be the 1st memory-intensive test
     TestBackRef();
 
diff --git a/src/test/test_parallel_for.cpp b/src/test/test_parallel_for.cpp
index 559f346..68fe08b 100644
--- a/src/test/test_parallel_for.cpp
+++ b/src/test/test_parallel_for.cpp
@@ -286,25 +286,25 @@ void TestCancellation()
 
 #include "harness_m128.h"
 
-#if HAVE_m128
-ClassWithSSE Global1[N], Global2[N];
-
+#if HAVE_m128 && !__TBB_SSE_STACK_ALIGNMENT_BROKEN
 struct SSE_Functor {
+    ClassWithSSE* Src, * Dst;
+    SSE_Functor( ClassWithSSE* src, ClassWithSSE* dst ) : Src(src), Dst(dst) {}
+
     void operator()( tbb::blocked_range<int>& r ) const {
         for( int i=r.begin(); i!=r.end(); ++i )
-            Global2[i] = Global1[i];
+            Dst[i] = Src[i];
     }     
 };
 
 //! Test that parallel_for works with stack-allocated __m128
 void TestSSE() {
-    for( int i=0; i<N; ++i ) {
-        Global1[i] = ClassWithSSE(i);
-        Global2[i] = ClassWithSSE();
-    }
-    tbb::parallel_for( tbb::blocked_range<int>(0,N), SSE_Functor() );
+    ClassWithSSE Array1[N], Array2[N];
+    for( int i=0; i<N; ++i )
+        Array1[i] = ClassWithSSE(i);
+    tbb::parallel_for( tbb::blocked_range<int>(0,N), SSE_Functor(Array1, Array2) );
     for( int i=0; i<N; ++i )
-        ASSERT( Global2[i]==ClassWithSSE(i), NULL ) ;
+        ASSERT( Array2[i]==ClassWithSSE(i), NULL ) ;
 }
 #endif /* HAVE_m128 */
 
@@ -340,7 +340,7 @@ int TestMain () {
             TestExceptionsSupport();
 #endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */
             if (p>1) TestCancellation();
-#if HAVE_m128
+#if HAVE_m128 && !__TBB_SSE_STACK_ALIGNMENT_BROKEN
             TestSSE();
 #endif /* HAVE_m128 */
 
@@ -351,6 +351,9 @@ int TestMain () {
 #if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
     REPORT("Known issue: exception handling tests are skipped.\n");
 #endif
+#if HAVE_m128 && __TBB_SSE_STACK_ALIGNMENT_BROKEN
+    REPORT("Known issue: stack alignment for SSE not tested.\n");
+#endif
     return Harness::Done;
 }
 
diff --git a/src/test/test_parallel_pipeline.cpp b/src/test/test_parallel_pipeline.cpp
index 0efeb37..e5cd43c 100644
--- a/src/test/test_parallel_pipeline.cpp
+++ b/src/test/test_parallel_pipeline.cpp
@@ -37,82 +37,163 @@ int filter_node_count = 0;
 
 const int n_tokens = 8;
 const int max_counter = 16;
-static tbb::atomic<int> tmp_counter;
+static tbb::atomic<int> output_counter;
+static tbb::atomic<int> input_counter;
+static tbb::atomic<int> check_type_counter;
 
-class check_type {
+class check_type : Harness::NoAfterlife {
     unsigned int id;
-    bool is_ready;
+    bool am_ready;
 public:
-    check_type() : id(0), is_ready(false) {}
+    check_type( ) : id(0), am_ready(false) {
+        ++check_type_counter;
+    }
+
+    check_type(const check_type& other) : Harness::NoAfterlife(other) {
+        other.AssertLive();
+        AssertLive();
+        id = other.id;
+        am_ready = other.am_ready;
+        ++check_type_counter;
+    }
+
+    ~check_type() { 
+        AssertLive(); 
+        --check_type_counter;
+    }
+    unsigned int my_id() { AssertLive(); return id; }
+    bool is_ready() { AssertLive(); return am_ready; }
     void function() {
+        AssertLive();
         if( id == 0 ) {
             id = 1;
-            is_ready = true;
+            am_ready = true;
         }
     }
 };
 
+// Filters must be copy-constructible, and be const-qualifiable.
 template<typename U>
-class input_filter {
-    tbb::atomic<int> counter;
+class input_filter : Harness::NoAfterlife {
 public:
-    input_filter() {
-        counter = max_counter;
-    } 
-    U operator()( tbb::flow_control& control ) {
-        if( --counter < 0 ) {
+    U operator()( tbb::flow_control& control ) const {
+        AssertLive();
+        if( --input_counter < 0 ) {
             control.stop();
         }
-        return U();
+        return U();  // default constructed
     }
+
 };
 
 template<>
-class input_filter<void> {
-    tbb::atomic<int> counter;
+class input_filter<void> : Harness::NoAfterlife {
 public:
-    input_filter() {
-        counter = max_counter;
-    } 
-    void operator()( tbb::flow_control& control ) {
-        if( --counter < 0 ) {
+    void operator()( tbb::flow_control& control ) const {
+        AssertLive();
+        if( --input_counter < 0 ) {
             control.stop();
         }
     }
+
+};
+
+
+template<>
+class input_filter<check_type> : Harness::NoAfterlife {
+public:
+    check_type operator()( tbb::flow_control& control ) const {
+        AssertLive();
+        if( --input_counter < 0 ) {
+            control.stop();
+        }
+        return check_type( );  // default constructed
+    }
 };
 
 template<typename T, typename U>
-class middle_filter {
+class middle_filter : Harness::NoAfterlife {
 public:
-    U operator()(T /*my_storage*/) {
+    U operator()(T /*my_storage*/) const {
+        AssertLive();
         return U();
     }
 };
 
+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();
+        return c;
+    }
+
+};
+
 template<typename T>
-class output_filter {
+class output_filter : Harness::NoAfterlife {
 public:
-    void operator()(T) {
-        tmp_counter++;
+    void operator()(T) const {
+        AssertLive();
+        output_counter++;
     }
 };
 
-void check_and_reset() {
-    ASSERT(tmp_counter == max_counter, "not all tokens were passed through pipeline");
-    tmp_counter = 0;
+template<>
+class output_filter<check_type> : Harness::NoAfterlife {
+public:
+    void operator()(check_type &c) const {
+        AssertLive();
+        ASSERT(c.my_id(), "unset id value");
+        ASSERT(c.is_ready(), "not yet ready");
+        output_counter++;
+    }
+};
+
+void resetCounters() {
+    output_counter = 0;
+    input_counter = max_counter;
+}
+
+void checkCounters() {
+    ASSERT(output_counter == max_counter, "not all tokens were passed through pipeline");
 }
 
 static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order}; 
 const unsigned number_of_filter_types = sizeof(filter_table)/sizeof(filter_table[0]);
 
+typedef tbb::filter_t<void, void> filter_chain;
+typedef tbb::filter::mode mode_array;
+
+// The filters are passed by value, which forces a temporary copy to be created.  This is
+// to reproduce the bug where a filter_chain uses refs to filters, which after a call
+// would be references to destructed temporaries.
+template<typename type1, typename type2>
+void fill_chain( filter_chain &my_chain, mode_array *filter_type, input_filter<type1> i_filter,
+         middle_filter<type1, type2> m_filter, output_filter<type2> o_filter ) {
+    my_chain = 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);
+}
+
 void run_function_spec() {
     ASSERT(!filter_node_count, NULL);
+    REMARK("Testing < void, void > (single filter in pipeline)");
+#if __TBB_LAMBDAS_PRESENT
+    REMARK( " ( + lambdas)");
+#endif
+    REMARK("\n");
     input_filter<void> i_filter;
     // Test pipeline that contains only one filter
     for( unsigned i = 0; i<number_of_filter_types; i++) {
         tbb::filter_t<void, void> one_filter( filter_table[i], i_filter );
         ASSERT(filter_node_count==1, "some filter nodes left after previous iteration?");
+        resetCounters();
         tbb::parallel_pipeline( n_tokens, one_filter );
+        // no need to check counters
 #if __TBB_LAMBDAS_PRESENT
         tbb::atomic<int> counter;
         counter = max_counter;
@@ -130,8 +211,13 @@ void run_function_spec() {
 }
 
 template<typename type1, typename type2>
-void run_function() {
+void run_function(const char *l1, const char *l2) {
     ASSERT(!filter_node_count, NULL);
+    REMARK("Testing < %s, %s >", l1, l2 );
+#if __TBB_LAMBDAS_PRESENT
+    REMARK( " ( + lambdas)");
+#endif
+    REMARK("\n");
 
     const size_t number_of_filters = 3;
 
@@ -154,36 +240,41 @@ void run_function() {
         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 );
-        check_and_reset();
+        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 );
-        check_and_reset();
+        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 );
-            check_and_reset();
+            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 );
-            check_and_reset();
+            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) );
-        check_and_reset();
+        checkCounters();
 
         // Construct filters, make a copy, destroy the original filters, and run with the copy
         int cnt = filter_node_count;
@@ -196,8 +287,18 @@ void run_function() {
             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 );
-            check_and_reset();
+            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?");
 
@@ -205,6 +306,7 @@ void run_function() {
         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 )
@@ -215,10 +317,10 @@ void run_function() {
                     return type2(); }
             ) &
             tbb::make_filter<type2, void>(filter_type[2], [] ( type2 ) -> void { 
-                    tmp_counter++; }
+                    output_counter++; }
             ) 
         );
-        check_and_reset();
+        checkCounters();
 #endif
     }
     ASSERT(!filter_node_count, "filter_node objects leaked");
@@ -230,13 +332,22 @@ int TestMain() {
     // Test with varying number of threads.
     for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
         // Initialize TBB task scheduler
+        REMARK("\nTesting with nthread=%d\n", nthread);
         tbb::task_scheduler_init init(nthread);
         
         // Run test several times with different types
         run_function_spec();
-        run_function<size_t,int>();
-        run_function<int,double>();
-        run_function<check_type,size_t>();
+        run_function<size_t,int>("size_t", "int");
+        run_function<int,double>("int", "double");
+        check_type_counter = 0;
+        run_function<check_type,size_t>("check_type", "size_t");
+        ASSERT(!check_type_counter, "Error in check_type creation/destruction");
+        // check_type as the second type in the pipeline only works if check_type
+        // is also the first type.  The middle_filter specialization for <check_type, check_type>
+        // changes the state of the check_type items, and this is checked in the output_filter
+        // specialization.
+        run_function<check_type, check_type>("check_type", "check_type");
+        ASSERT(!check_type_counter, "Error in check_type creation/destruction");
     }
     return Harness::Done;
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/tbb.git



More information about the debian-science-commits mailing list