Merge branch 'flat_combinig_add_stress_and_unint_tests' of https://github.com/mgalimu...
[libcds.git] / cds / memory / pool_allocator.h
index c09955f952bf91e3c6af868fd681f7ec0bb203f3..e38f2544ee6b826030c60ade9e5a288d2130bae9 100644 (file)
@@ -1,7 +1,35 @@
-//$$CDS-header$$
+/*
+    This file is a part of libcds - Concurrent Data Structures library
 
-#ifndef __CDS_MEMORY_POOL_ALLOCATOR_H
-#define __CDS_MEMORY_POOL_ALLOCATOR_H
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
+
+    Source code repo: http://github.com/khizmax/libcds/
+    Download: http://sourceforge.net/projects/libcds/files/
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this
+      list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSLIB_MEMORY_POOL_ALLOCATOR_H
+#define CDSLIB_MEMORY_POOL_ALLOCATOR_H
 
 #include <cds/details/defs.h>
 #include <utility>
@@ -17,7 +45,7 @@ namespace cds { namespace memory {
 
         Template arguments:
         - \p T - value type
-        - \p Accessor - a functor to access to pool object. The pool has the following interface:
+        - \p Accessor - a functor to access to the pool object. The pool has the following interface:
             \code
             template <typename T>
             class pool {
@@ -29,7 +57,7 @@ namespace cds { namespace memory {
 
         <b>Usage</b>
 
-            Suppose, we have got a pool with interface above. Usually, the pool is a static object:
+            Suppose, we have a pool with interface above. Usually, the pool is a static object:
             \code
                 static pool<Foo>     thePool;
             \endcode
@@ -87,7 +115,7 @@ namespace cds { namespace memory {
         {
             return &x;
         }
-        pointer allocate( size_type n, void const * hint = 0)
+        pointer allocate( size_type n, void const * /*hint*/ = 0)
         {
             static_assert( sizeof(value_type) <= sizeof(typename accessor_type::value_type), "Incompatible type" );
 
@@ -102,19 +130,12 @@ namespace cds { namespace memory {
             return size_t(-1) / sizeof(value_type);
         }
 
-#   if defined(CDS_MOVE_SEMANTICS_SUPPORT)
         template <class U, class... Args>
         void construct(U* p, Args&&... args)
         {
             new((void *)p) U( std::forward<Args>(args)...);
         }
-#   else
-        template <typename Arg>
-        void construct(pointer p, Arg const& val )
-        {
-            new((void *) p) value_type(val);
-        }
-#   endif
+
         template <class U>
         void destroy(U* p)
         {
@@ -126,4 +147,4 @@ namespace cds { namespace memory {
 }} // namespace cds::memory
 
 
-#endif // #ifndef __CDS_MEMORY_POOL_ALLOCATOR_H
+#endif // #ifndef CDSLIB_MEMORY_POOL_ALLOCATOR_H