From: khizmax Date: Sat, 27 Sep 2014 16:01:38 +0000 (+0400) Subject: Move ellen_bintree_base.h from cds/container to cds/container/details X-Git-Tag: v2.0.0~270 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=bd75ca75fd01e1d37d315fd5d873b4c13b85f634;p=libcds.git Move ellen_bintree_base.h from cds/container to cds/container/details --- diff --git a/cds/container/details/ellen_bintree_base.h b/cds/container/details/ellen_bintree_base.h new file mode 100644 index 00000000..ca6d7908 --- /dev/null +++ b/cds/container/details/ellen_bintree_base.h @@ -0,0 +1,370 @@ +//$$CDS-header$$ + +#ifndef __CDS_CONTAINER_DETAILS_ELLEN_BINTREE_BASE_H +#define __CDS_CONTAINER_DETAILS_ELLEN_BINTREE_BASE_H + +#include +#include +#include +#include + + +namespace cds { namespace container { + /// EllenBinTree related definitions + /** @ingroup cds_nonintrusive_helper + */ + namespace ellen_bintree { + +#ifdef CDS_DOXYGEN_INVOKED + /// Typedef for cds::intrusive::ellen_bintree::update_desc + typedef cds::intrusive::ellen_bintree::update_desc update_desc; + + /// Typedef for cds::intrusive::ellen_bintree::internal_node + typedef cds::intrusive::ellen_bintree::internal_node internal_node; + + /// Typedef for cds::intrusive::ellen_bintree::key_extractor + typedef cds::intrusive::ellen_bintree::key_extractor key_extractor; + + /// Typedef for cds::intrusive::ellen_bintree::update_desc_allocator + typedef cds::intrusive::ellen_bintree::update_desc_allocator update_desc_allocator; + + /// Typedef for cds::intrusive::ellen_bintree::stat + typedef cds::intrusive::ellen_bintree::stat stat; + + /// Typedef for cds::intrusive::ellen_bintree::empty_stat + typedef cds::intrusive::ellen_bintree::empty_stat empty_stat; +#else + using cds::intrusive::ellen_bintree::update_desc; + using cds::intrusive::ellen_bintree::internal_node; + using cds::intrusive::ellen_bintree::key_extractor; + using cds::intrusive::ellen_bintree::update_desc_allocator; + using cds::intrusive::ellen_bintree::stat; + using cds::intrusive::ellen_bintree::empty_stat; + using cds::intrusive::ellen_bintree::node_types; +#endif + + /// EllenBinTree leaf node + template + struct node: public cds::intrusive::ellen_bintree::node + { + typedef T value_type ; ///< Value type + + T m_Value ; ///< Value + + /// Default ctor + node() + {} + + /// Initializing ctor + template + node(Q const& v) + : m_Value(v) + {} + + /// Copy constructor + template + node( Args const&... args) + : m_Value( args... ) + {} + + /// Move constructor + template + node( Args&&... args) + : m_Value( std::forward(args)... ) + {} + }; + + /// EllenBinTreeMap leaf node + template + struct map_node: public cds::intrusive::ellen_bintree::node< GC > + { + typedef Key key_type ; ///< key type + typedef T mapped_type ; ///< value type + typedef std::pair value_type ; ///< key-value pair stored in the map + + value_type m_Value ; ///< Key-value pair stored in map leaf node + + /// Initializes key field, value if default-constructed + template + map_node( K const& key ) + : m_Value( std::make_pair( key_type(key), mapped_type() )) + {} + + /// Initializes key and value fields + template + map_node( K const& key, Q const& v ) + : m_Value( std::make_pair(key_type(key), mapped_type(v) )) + {} + }; + + /// Type traits for EllenBinTreeSet, EllenBinTreeMap and EllenBinTreePriorityQueue + struct type_traits + { + /// Key extracting functor (only for EllenBinTreeSet) + /** + You should explicit define a valid functor. + The functor has the following prototype: + \code + struct key_extractor { + void operator ()( Key& dest, T const& src ); + }; + \endcode + It should initialize \p dest key from \p src data. + The functor is used to initialize internal nodes. + */ + typedef opt::none key_extractor; + + /// Key comparison functor + /** + No default functor is provided. If the option is not specified, the \p less is used. + + See cds::opt::compare option description for functor interface. + + You should provide \p compare or \p less functor. + See \ref cds_container_EllenBinTreeSet_rcu_less "predicate requirements". + */ + typedef opt::none compare; + + /// Specifies binary predicate used for key compare. + /** + See cds::opt::less option description for predicate interface. + + You should provide \p compare or \p less functor. + See \ref cds_container_EllenBinTreeSet_rcu_less "predicate requirements". + */ + typedef opt::none less; + + /// Item counter + /** + The type for item counting feature (see cds::opt::item_counter). + Default is no item counter (\ref atomicity::empty_item_counter) + */ + typedef atomicity::empty_item_counter item_counter; + + /// C++ memory ordering model + /** + List of available memory ordering see opt::memory_model + */ + typedef opt::v::relaxed_ordering memory_model; + + /// Allocator for update descriptors + /** + The allocator type is used for \ref update_desc. + + Update descriptor is helping data structure with short lifetime and it is good candidate + for pooling. The number of simultaneously existing descriptors is a small number + limited the number of threads working with the tree. + Therefore, a bounded lock-free container like \p cds::container::VyukovMPMCCycleQueue + is good choice for the free-list of update descriptors, + see cds::memory::vyukov_queue_pool free-list implementation. + + Also notice that size of update descriptor is not dependent on the type of data + stored in the tree so single free-list object can be used for several \p EllenBinTree object. + */ + typedef CDS_DEFAULT_ALLOCATOR update_desc_allocator; + + /// Allocator for internal nodes + /** + The allocator type is used for \ref internal_node. + */ + typedef CDS_DEFAULT_ALLOCATOR node_allocator; + + /// Allocator for leaf nodes + /** + Each leaf node contains data stored in the container. + */ + typedef CDS_DEFAULT_ALLOCATOR allocator; + + /// Internal statistics + /** + Possible types: ellen_bintree::empty_stat (the default), ellen_bintree::stat or any + other with interface like \p %stat. + */ + typedef empty_stat stat; + + /// RCU deadlock checking policy (only for RCU-based EllenBinTreeXXX classes) + /** + List of available options see opt::rcu_check_deadlock + */ + typedef cds::opt::v::rcu_throw_deadlock rcu_check_deadlock; + + /// Key copy policy (for EllenBinTreeMap) + /** + The key copy policy defines a functor to copy leaf node's key to internal node. + This policy is used only in EllenBinTreeMap. By default, assignment operator is used. + + The copy functor interface is: + \code + struct copy_functor { + void operator()( Key& dest, Key const& src ); + }; + \endcode + */ + typedef opt::none copy_policy; + }; + + + /// Metafunction converting option list to EllenBinTreeSet traits + /** + This is a wrapper for cds::opt::make_options< type_traits, Options...> + \p Options list see \ref cds_container_EllenBinTreeSet "EllenBinTreeSet". + */ + template + struct make_set_traits { +# ifdef CDS_DOXYGEN_INVOKED + typedef implementation_defined type ; ///< Metafunction result +# else + typedef typename cds::opt::make_options< + typename cds::opt::find_type_traits< type_traits, Options... >::type + ,Options... + >::type type; +# endif + }; + + /// Metafunction converting option list to EllenBinTreeMap traits + /** + This is a wrapper for cds::opt::make_options< type_traits, Options...> + \p Options list see \ref cds_container_EllenBinTreeMap "EllenBinTreeMap". + */ + template + struct make_map_traits { +# ifdef CDS_DOXYGEN_INVOKED + typedef implementation_defined type ; ///< Metafunction result +# else + typedef typename cds::opt::make_options< + typename cds::opt::find_type_traits< type_traits, Options... >::type + ,Options... + >::type type; +# endif + }; + + //@cond + namespace details { + + template < class GC, typename Key, typename T, class Traits> + struct make_ellen_bintree_set + { + typedef GC gc; + typedef Key key_type; + typedef T value_type; + typedef Traits original_type_traits; + + typedef node< gc, value_type > leaf_node; + + struct intrusive_key_extractor + { + void operator()( key_type& dest, leaf_node const& src ) const + { + typename original_type_traits::key_extractor()( dest, src.m_Value ); + } + }; + + struct value_accessor + { + value_type const& operator()( leaf_node const& node ) const + { + return node.m_Value; + } + }; + + typedef typename cds::opt::details::make_comparator< value_type, original_type_traits, false >::type key_comparator; + + typedef cds::details::Allocator< leaf_node, typename original_type_traits::allocator> cxx_leaf_node_allocator; + struct leaf_deallocator + { + void operator()( leaf_node * p ) const + { + cxx_leaf_node_allocator().Delete( p ); + } + }; + + struct intrusive_type_traits: public original_type_traits + { + typedef cds::intrusive::ellen_bintree::base_hook< cds::opt::gc< gc > > hook; + typedef intrusive_key_extractor key_extractor; + typedef leaf_deallocator disposer; + typedef cds::details::compare_wrapper< leaf_node, key_comparator, value_accessor > compare; + }; + + // Metafunction result + typedef cds::intrusive::EllenBinTree< gc, key_type, leaf_node, intrusive_type_traits > type; + }; + + template < class GC, typename Key, typename T, class Traits> + struct make_ellen_bintree_map + { + typedef GC gc; + typedef Key key_type; + typedef T mapped_type; + typedef map_node< gc, key_type, mapped_type > leaf_node; + typedef typename leaf_node::value_type value_type; + + typedef Traits original_type_traits; + + struct assignment_copy_policy { + void operator()( key_type& dest, key_type const& src ) + { + dest = src; + } + }; + typedef typename std::conditional< + std::is_same< typename original_type_traits::copy_policy, opt::none >::value, + assignment_copy_policy, + typename original_type_traits::copy_policy + >::type copy_policy; + + struct intrusive_key_extractor + { + void operator()( key_type& dest, leaf_node const& src ) const + { + copy_policy()( dest, src.m_Value.first ); + } + }; + + struct key_accessor + { + key_type const& operator()( leaf_node const& node ) const + { + return node.m_Value.first; + } + }; + + typedef typename cds::opt::details::make_comparator< key_type, original_type_traits, false >::type key_comparator; + + typedef cds::details::Allocator< leaf_node, typename original_type_traits::allocator> cxx_leaf_node_allocator; + struct leaf_deallocator + { + void operator()( leaf_node * p ) const + { + cxx_leaf_node_allocator().Delete( p ); + } + }; + + struct intrusive_type_traits: public original_type_traits + { + typedef cds::intrusive::ellen_bintree::base_hook< cds::opt::gc< gc > > hook; + typedef intrusive_key_extractor key_extractor; + typedef leaf_deallocator disposer; + typedef cds::details::compare_wrapper< leaf_node, key_comparator, key_accessor > compare; + }; + + // Metafunction result + typedef cds::intrusive::EllenBinTree< gc, key_type, leaf_node, intrusive_type_traits > type; + }; + + } // namespace details + //@endcond + } // namespace ellen_bintree + + // Forward declarations + //@cond + template < class GC, typename Key, typename T, class Traits = ellen_bintree::type_traits > + class EllenBinTreeSet; + + template < class GC, typename Key, typename T, class Traits = ellen_bintree::type_traits > + class EllenBinTreeMap; + //@endcond + +}} // namespace cds::container + +#endif // #ifndef __CDS_CONTAINER_DETAILS_ELLEN_BINTREE_BASE_H diff --git a/cds/container/ellen_bintree_base.h b/cds/container/ellen_bintree_base.h deleted file mode 100644 index c772ffb9..00000000 --- a/cds/container/ellen_bintree_base.h +++ /dev/null @@ -1,370 +0,0 @@ -//$$CDS-header$$ - -#ifndef __CDS_CONTAINER_ELLEN_BINTREE_BASE_H -#define __CDS_CONTAINER_ELLEN_BINTREE_BASE_H - -#include -#include -#include -#include - - -namespace cds { namespace container { - /// EllenBinTree related definitions - /** @ingroup cds_nonintrusive_helper - */ - namespace ellen_bintree { - -#ifdef CDS_DOXYGEN_INVOKED - /// Typedef for cds::intrusive::ellen_bintree::update_desc - typedef cds::intrusive::ellen_bintree::update_desc update_desc; - - /// Typedef for cds::intrusive::ellen_bintree::internal_node - typedef cds::intrusive::ellen_bintree::internal_node internal_node; - - /// Typedef for cds::intrusive::ellen_bintree::key_extractor - typedef cds::intrusive::ellen_bintree::key_extractor key_extractor; - - /// Typedef for cds::intrusive::ellen_bintree::update_desc_allocator - typedef cds::intrusive::ellen_bintree::update_desc_allocator update_desc_allocator; - - /// Typedef for cds::intrusive::ellen_bintree::stat - typedef cds::intrusive::ellen_bintree::stat stat; - - /// Typedef for cds::intrusive::ellen_bintree::empty_stat - typedef cds::intrusive::ellen_bintree::empty_stat empty_stat; -#else - using cds::intrusive::ellen_bintree::update_desc; - using cds::intrusive::ellen_bintree::internal_node; - using cds::intrusive::ellen_bintree::key_extractor; - using cds::intrusive::ellen_bintree::update_desc_allocator; - using cds::intrusive::ellen_bintree::stat; - using cds::intrusive::ellen_bintree::empty_stat; - using cds::intrusive::ellen_bintree::node_types; -#endif - - /// EllenBinTree leaf node - template - struct node: public cds::intrusive::ellen_bintree::node - { - typedef T value_type ; ///< Value type - - T m_Value ; ///< Value - - /// Default ctor - node() - {} - - /// Initializing ctor - template - node(Q const& v) - : m_Value(v) - {} - - /// Copy constructor - template - node( Args const&... args) - : m_Value( args... ) - {} - - /// Move constructor - template - node( Args&&... args) - : m_Value( std::forward(args)... ) - {} - }; - - /// EllenBinTreeMap leaf node - template - struct map_node: public cds::intrusive::ellen_bintree::node< GC > - { - typedef Key key_type ; ///< key type - typedef T mapped_type ; ///< value type - typedef std::pair value_type ; ///< key-value pair stored in the map - - value_type m_Value ; ///< Key-value pair stored in map leaf node - - /// Initializes key field, value if default-constructed - template - map_node( K const& key ) - : m_Value( std::make_pair( key_type(key), mapped_type() )) - {} - - /// Initializes key and value fields - template - map_node( K const& key, Q const& v ) - : m_Value( std::make_pair(key_type(key), mapped_type(v) )) - {} - }; - - /// Type traits for EllenBinTreeSet, EllenBinTreeMap and EllenBinTreePriorityQueue - struct type_traits - { - /// Key extracting functor (only for EllenBinTreeSet) - /** - You should explicit define a valid functor. - The functor has the following prototype: - \code - struct key_extractor { - void operator ()( Key& dest, T const& src ); - }; - \endcode - It should initialize \p dest key from \p src data. - The functor is used to initialize internal nodes. - */ - typedef opt::none key_extractor; - - /// Key comparison functor - /** - No default functor is provided. If the option is not specified, the \p less is used. - - See cds::opt::compare option description for functor interface. - - You should provide \p compare or \p less functor. - See \ref cds_container_EllenBinTreeSet_rcu_less "predicate requirements". - */ - typedef opt::none compare; - - /// Specifies binary predicate used for key compare. - /** - See cds::opt::less option description for predicate interface. - - You should provide \p compare or \p less functor. - See \ref cds_container_EllenBinTreeSet_rcu_less "predicate requirements". - */ - typedef opt::none less; - - /// Item counter - /** - The type for item counting feature (see cds::opt::item_counter). - Default is no item counter (\ref atomicity::empty_item_counter) - */ - typedef atomicity::empty_item_counter item_counter; - - /// C++ memory ordering model - /** - List of available memory ordering see opt::memory_model - */ - typedef opt::v::relaxed_ordering memory_model; - - /// Allocator for update descriptors - /** - The allocator type is used for \ref update_desc. - - Update descriptor is helping data structure with short lifetime and it is good candidate - for pooling. The number of simultaneously existing descriptors is a small number - limited the number of threads working with the tree. - Therefore, a bounded lock-free container like \p cds::container::VyukovMPMCCycleQueue - is good choice for the free-list of update descriptors, - see cds::memory::vyukov_queue_pool free-list implementation. - - Also notice that size of update descriptor is not dependent on the type of data - stored in the tree so single free-list object can be used for several \p EllenBinTree object. - */ - typedef CDS_DEFAULT_ALLOCATOR update_desc_allocator; - - /// Allocator for internal nodes - /** - The allocator type is used for \ref internal_node. - */ - typedef CDS_DEFAULT_ALLOCATOR node_allocator; - - /// Allocator for leaf nodes - /** - Each leaf node contains data stored in the container. - */ - typedef CDS_DEFAULT_ALLOCATOR allocator; - - /// Internal statistics - /** - Possible types: ellen_bintree::empty_stat (the default), ellen_bintree::stat or any - other with interface like \p %stat. - */ - typedef empty_stat stat; - - /// RCU deadlock checking policy (only for RCU-based EllenBinTreeXXX classes) - /** - List of available options see opt::rcu_check_deadlock - */ - typedef cds::opt::v::rcu_throw_deadlock rcu_check_deadlock; - - /// Key copy policy (for EllenBinTreeMap) - /** - The key copy policy defines a functor to copy leaf node's key to internal node. - This policy is used only in EllenBinTreeMap. By default, assignment operator is used. - - The copy functor interface is: - \code - struct copy_functor { - void operator()( Key& dest, Key const& src ); - }; - \endcode - */ - typedef opt::none copy_policy; - }; - - - /// Metafunction converting option list to EllenBinTreeSet traits - /** - This is a wrapper for cds::opt::make_options< type_traits, Options...> - \p Options list see \ref cds_container_EllenBinTreeSet "EllenBinTreeSet". - */ - template - struct make_set_traits { -# ifdef CDS_DOXYGEN_INVOKED - typedef implementation_defined type ; ///< Metafunction result -# else - typedef typename cds::opt::make_options< - typename cds::opt::find_type_traits< type_traits, Options... >::type - ,Options... - >::type type; -# endif - }; - - /// Metafunction converting option list to EllenBinTreeMap traits - /** - This is a wrapper for cds::opt::make_options< type_traits, Options...> - \p Options list see \ref cds_container_EllenBinTreeMap "EllenBinTreeMap". - */ - template - struct make_map_traits { -# ifdef CDS_DOXYGEN_INVOKED - typedef implementation_defined type ; ///< Metafunction result -# else - typedef typename cds::opt::make_options< - typename cds::opt::find_type_traits< type_traits, Options... >::type - ,Options... - >::type type; -# endif - }; - - //@cond - namespace details { - - template < class GC, typename Key, typename T, class Traits> - struct make_ellen_bintree_set - { - typedef GC gc; - typedef Key key_type; - typedef T value_type; - typedef Traits original_type_traits; - - typedef node< gc, value_type > leaf_node; - - struct intrusive_key_extractor - { - void operator()( key_type& dest, leaf_node const& src ) const - { - typename original_type_traits::key_extractor()( dest, src.m_Value ); - } - }; - - struct value_accessor - { - value_type const& operator()( leaf_node const& node ) const - { - return node.m_Value; - } - }; - - typedef typename cds::opt::details::make_comparator< value_type, original_type_traits, false >::type key_comparator; - - typedef cds::details::Allocator< leaf_node, typename original_type_traits::allocator> cxx_leaf_node_allocator; - struct leaf_deallocator - { - void operator()( leaf_node * p ) const - { - cxx_leaf_node_allocator().Delete( p ); - } - }; - - struct intrusive_type_traits: public original_type_traits - { - typedef cds::intrusive::ellen_bintree::base_hook< cds::opt::gc< gc > > hook; - typedef intrusive_key_extractor key_extractor; - typedef leaf_deallocator disposer; - typedef cds::details::compare_wrapper< leaf_node, key_comparator, value_accessor > compare; - }; - - // Metafunction result - typedef cds::intrusive::EllenBinTree< gc, key_type, leaf_node, intrusive_type_traits > type; - }; - - template < class GC, typename Key, typename T, class Traits> - struct make_ellen_bintree_map - { - typedef GC gc; - typedef Key key_type; - typedef T mapped_type; - typedef map_node< gc, key_type, mapped_type > leaf_node; - typedef typename leaf_node::value_type value_type; - - typedef Traits original_type_traits; - - struct assignment_copy_policy { - void operator()( key_type& dest, key_type const& src ) - { - dest = src; - } - }; - typedef typename std::conditional< - std::is_same< typename original_type_traits::copy_policy, opt::none >::value, - assignment_copy_policy, - typename original_type_traits::copy_policy - >::type copy_policy; - - struct intrusive_key_extractor - { - void operator()( key_type& dest, leaf_node const& src ) const - { - copy_policy()( dest, src.m_Value.first ); - } - }; - - struct key_accessor - { - key_type const& operator()( leaf_node const& node ) const - { - return node.m_Value.first; - } - }; - - typedef typename cds::opt::details::make_comparator< key_type, original_type_traits, false >::type key_comparator; - - typedef cds::details::Allocator< leaf_node, typename original_type_traits::allocator> cxx_leaf_node_allocator; - struct leaf_deallocator - { - void operator()( leaf_node * p ) const - { - cxx_leaf_node_allocator().Delete( p ); - } - }; - - struct intrusive_type_traits: public original_type_traits - { - typedef cds::intrusive::ellen_bintree::base_hook< cds::opt::gc< gc > > hook; - typedef intrusive_key_extractor key_extractor; - typedef leaf_deallocator disposer; - typedef cds::details::compare_wrapper< leaf_node, key_comparator, key_accessor > compare; - }; - - // Metafunction result - typedef cds::intrusive::EllenBinTree< gc, key_type, leaf_node, intrusive_type_traits > type; - }; - - } // namespace details - //@endcond - } // namespace ellen_bintree - - // Forward declarations - //@cond - template < class GC, typename Key, typename T, class Traits = ellen_bintree::type_traits > - class EllenBinTreeSet; - - template < class GC, typename Key, typename T, class Traits = ellen_bintree::type_traits > - class EllenBinTreeMap; - //@endcond - -}} // namespace cds::container - -#endif // #ifndef __CDS_CONTAINER_ELLEN_BINTREE_BASE_H diff --git a/cds/container/ellen_bintree_map_impl.h b/cds/container/ellen_bintree_map_impl.h index 7f34946a..4da58147 100644 --- a/cds/container/ellen_bintree_map_impl.h +++ b/cds/container/ellen_bintree_map_impl.h @@ -4,7 +4,7 @@ #define __CDS_CONTAINER_ELLEN_BINTREE_MAP_IMPL_H #include -#include +#include #include #include #include diff --git a/cds/container/ellen_bintree_map_rcu.h b/cds/container/ellen_bintree_map_rcu.h index c61a01cb..3da55942 100644 --- a/cds/container/ellen_bintree_map_rcu.h +++ b/cds/container/ellen_bintree_map_rcu.h @@ -3,7 +3,7 @@ #ifndef __CDS_CONTAINER_ELLEN_BINTREE_MAP_RCU_H #define __CDS_CONTAINER_ELLEN_BINTREE_MAP_RCU_H -#include +#include #include #include diff --git a/cds/container/ellen_bintree_set_impl.h b/cds/container/ellen_bintree_set_impl.h index 43e5ae61..b51dd927 100644 --- a/cds/container/ellen_bintree_set_impl.h +++ b/cds/container/ellen_bintree_set_impl.h @@ -4,7 +4,7 @@ #define __CDS_CONTAINER_ELLEN_BINTREE_SET_IMPL_H #include -#include +#include #include #include diff --git a/cds/container/ellen_bintree_set_rcu.h b/cds/container/ellen_bintree_set_rcu.h index 949f5c09..96788e52 100644 --- a/cds/container/ellen_bintree_set_rcu.h +++ b/cds/container/ellen_bintree_set_rcu.h @@ -3,7 +3,7 @@ #ifndef __CDS_CONTAINER_ELLEN_BINTREE_SET_RCU_H #define __CDS_CONTAINER_ELLEN_BINTREE_SET_RCU_H -#include +#include #include namespace cds { namespace container { diff --git a/projects/Win/vc12/cds.vcxproj b/projects/Win/vc12/cds.vcxproj index ce60f743..8ff0c9ca 100644 --- a/projects/Win/vc12/cds.vcxproj +++ b/projects/Win/vc12/cds.vcxproj @@ -657,11 +657,11 @@ + - diff --git a/projects/Win/vc12/cds.vcxproj.filters b/projects/Win/vc12/cds.vcxproj.filters index be401fc2..54443a7f 100644 --- a/projects/Win/vc12/cds.vcxproj.filters +++ b/projects/Win/vc12/cds.vcxproj.filters @@ -1130,9 +1130,6 @@ Header Files\cds\intrusive - - Header Files\cds\container - Header Files\cds\container @@ -1280,5 +1277,8 @@ Header Files\cds\container\details + + Header Files\cds\container\details + \ No newline at end of file diff --git a/tests/unit/ellen_bintree_update_desc_pool.h b/tests/unit/ellen_bintree_update_desc_pool.h index ccb37f23..0887b2f9 100644 --- a/tests/unit/ellen_bintree_update_desc_pool.h +++ b/tests/unit/ellen_bintree_update_desc_pool.h @@ -4,7 +4,7 @@ #define __CDS_UNIT_ELLEN_BINTREE_UPDATE_DESC_POOL_H #include -#include +#include #include #include