Merge pull request #84 from ldionne/patch-1
[libcds.git] / cds / init.h
index 600858091675c0affef9a37a7d550588653bdae0..e13ed2d5e93edd9ec8d24a9da336fb1184b556e1 100644 (file)
@@ -1,7 +1,35 @@
-//$$CDS-header$$
+/*
+    This file is a part of libcds - Concurrent Data Structures library
 
 
-#ifndef __CDS_INIT_H
-#define __CDS_INIT_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_INIT_H
+#define CDSLIB_INIT_H
 
 #include <cds/details/defs.h>
 #include <cds/os/topology.h>
 
 #include <cds/details/defs.h>
 #include <cds/os/topology.h>
@@ -21,36 +49,15 @@ namespace cds {
     /**
         The function initializes \p CDS library framework.
         Before usage of \p CDS library features your application must initialize it
     /**
         The function initializes \p CDS library framework.
         Before usage of \p CDS library features your application must initialize it
-        by calling \p Initialize function:
-        @code
-        #include <cds/init.h>
-        #include <cds/gc/hp.h>
-
-        int main()
-        {
-            // // Initialize CDS library
-            cds::Initialize( 0 );
-
-            {
-                // // Initialize Hazard Pointer GC (if it is needed for you)
-                cds::gc::HP();
-
-                // // Now you can use CDS library containers with Hazard Pointer GC
-                ...
-
-            }
-            // // Teminate CDS library
-            cds::Terminate();
-
-            return 0;
-        }
-        @endcode
+        by calling \p %Initialize() function, see \ref cds_how_to_use "how to use the library".
 
 
-        You may call \p Initialize several times, only first call is significant others will be ignored.
-        To terminate the \p CDS library correctly, each call to \p Initialize must be balanced by a corresponding call to \ref Terminate.
+        You can call \p Initialize several times, only first call is significant others will be ignored.
+        To terminate the \p CDS library correctly, each call to \p %Initialize() must be balanced
+        by a corresponding \p Terminate() call.
 
         Note, that this function does not initialize garbage collectors. To use GC you need you should call
 
         Note, that this function does not initialize garbage collectors. To use GC you need you should call
-        GC-specific constructor function to initialize internal structures of GC. See cds::gc and its subnamespace for details.
+        GC-specific constructor function to initialize internal structures of GC.
+        See \p cds::gc for details.
     */
     static inline void Initialize(
         unsigned int nFeatureFlags = 0  ///< for future use, must be zero.
     */
     static inline void Initialize(
         unsigned int nFeatureFlags = 0  ///< for future use, must be zero.
@@ -58,7 +65,7 @@ namespace cds {
     {
         CDS_UNUSED( nFeatureFlags );
 
     {
         CDS_UNUSED( nFeatureFlags );
 
-        if ( cds::details::init_first_call() )
+        if ( cds::details::init_first_call())
         {
             cds::OS::topology::init();
             cds::threading::ThreadData::s_nProcCount = cds::OS::topology::processor_count();
         {
             cds::OS::topology::init();
             cds::threading::ThreadData::s_nProcCount = cds::OS::topology::processor_count();
@@ -72,12 +79,13 @@ namespace cds {
     /// Terminate CDS library
     /**
         This function terminates \p CDS library.
     /// Terminate CDS library
     /**
         This function terminates \p CDS library.
-        After \p Terminate calling many features of the library are unavailable.
-        This call should be the last call of \p CDS library in your application.
+        After \p %Terminate() calling many features of the library are unavailable.
+        This call should be the last call of \p CDS library in your application,
+        see \ref cds_how_to_use "how to use the library".
     */
     static inline void Terminate()
     {
     */
     static inline void Terminate()
     {
-        if ( cds::details::fini_last_call() ) {
+        if ( cds::details::fini_last_call()) {
             cds::threading::Manager::fini();
 
             cds::OS::topology::fini();
             cds::threading::Manager::fini();
 
             cds::OS::topology::fini();
@@ -86,4 +94,4 @@ namespace cds {
 
 }   // namespace cds
 
 
 }   // namespace cds
 
-#endif // __CDS_INIT_H
+#endif // CDSLIB_INIT_H