mirror of https://github.com/CGAL/cgal
Merge pull request #5104 from gdamiand/CMap-other_containers-gdamiand
Allow to use compact container or concurrent compact container for CMap, GMap and LCC
This commit is contained in:
commit
bbf4a54a9f
|
|
@ -23,16 +23,16 @@ namespace CGAL {
|
||||||
template <class, class>
|
template <class, class>
|
||||||
class Concurrent_compact_container;
|
class Concurrent_compact_container;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
class Combinatorial_map_storage_1;
|
class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
class Generalized_map_storage_1;
|
class Generalized_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
class CMap_linear_cell_complex_storage_1;
|
class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
class GMap_linear_cell_complex_storage_1;
|
class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
@ -108,16 +108,16 @@ namespace CGAL {
|
||||||
OnMerge, OnSplit, WithID>:
|
OnMerge, OnSplit, WithID>:
|
||||||
public Add_id<WithID>
|
public Add_id<WithID>
|
||||||
{
|
{
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Combinatorial_map_storage_1;
|
friend class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Generalized_map_storage_1;
|
friend class Generalized_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class CMap_linear_cell_complex_storage_1;
|
friend class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class GMap_linear_cell_complex_storage_1;
|
friend class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template <class, class, class, class>
|
template <class, class, class, class>
|
||||||
|
|
@ -218,16 +218,16 @@ namespace CGAL {
|
||||||
class Cell_attribute_without_info<Refs, Tag_true,
|
class Cell_attribute_without_info<Refs, Tag_true,
|
||||||
OnMerge, OnSplit, WithID>: public Add_id<WithID>
|
OnMerge, OnSplit, WithID>: public Add_id<WithID>
|
||||||
{
|
{
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Combinatorial_map_storage_1;
|
friend class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Generalized_map_storage_1;
|
friend class Generalized_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class CMap_linear_cell_complex_storage_1;
|
friend class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class GMap_linear_cell_complex_storage_1;
|
friend class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template <class, class, class, class>
|
template <class, class, class, class>
|
||||||
|
|
@ -334,16 +334,16 @@ namespace CGAL {
|
||||||
class Cell_attribute<Refs, void, Tag_, OnMerge, OnSplit, WithID> :
|
class Cell_attribute<Refs, void, Tag_, OnMerge, OnSplit, WithID> :
|
||||||
public Cell_attribute_without_info<Refs, Tag_, OnMerge, OnSplit, WithID>
|
public Cell_attribute_without_info<Refs, Tag_, OnMerge, OnSplit, WithID>
|
||||||
{
|
{
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Combinatorial_map_storage_1;
|
friend class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Generalized_map_storage_1;
|
friend class Generalized_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class CMap_linear_cell_complex_storage_1;
|
friend class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class GMap_linear_cell_complex_storage_1;
|
friend class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template <class, class, class, class>
|
template <class, class, class, class>
|
||||||
|
|
@ -374,16 +374,16 @@ namespace CGAL {
|
||||||
public Cell_attribute_without_info<Refs, Tag_, OnMerge, OnSplit, WithID>,
|
public Cell_attribute_without_info<Refs, Tag_, OnMerge, OnSplit, WithID>,
|
||||||
public Info_for_cell_attribute<Info_>
|
public Info_for_cell_attribute<Info_>
|
||||||
{
|
{
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Combinatorial_map_storage_1;
|
friend class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Generalized_map_storage_1;
|
friend class Generalized_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class CMap_linear_cell_complex_storage_1;
|
friend class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class GMap_linear_cell_complex_storage_1;
|
friend class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template <class, class, class, class>
|
template <class, class, class, class>
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#define COMBINATORIAL_MAP_FWD_H 1
|
#define COMBINATORIAL_MAP_FWD_H 1
|
||||||
|
|
||||||
#include <CGAL/memory.h>
|
#include <CGAL/memory.h>
|
||||||
|
#include <CGAL/tags.h>
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
|
|
@ -23,7 +24,7 @@ struct Combinatorial_map_min_items;
|
||||||
struct Generic_map_min_items;
|
struct Generic_map_min_items;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template<unsigned int d_, class Items_, class Alloc_ >
|
template<unsigned int d_, class Items_, class Alloc_, class Concurrent_tag=CGAL::Tag_false >
|
||||||
class Combinatorial_map_storage_1;
|
class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template < unsigned int d_, class Refs_,
|
template < unsigned int d_, class Refs_,
|
||||||
|
|
@ -33,7 +34,7 @@ template < unsigned int d_, class Refs_,
|
||||||
class Items_=Generic_map_min_items,
|
class Items_=Generic_map_min_items,
|
||||||
#endif
|
#endif
|
||||||
class Alloc_=CGAL_ALLOCATOR(int),
|
class Alloc_=CGAL_ALLOCATOR(int),
|
||||||
class Storage_= Combinatorial_map_storage_1<d_, Items_, Alloc_> >
|
class Storage_= Combinatorial_map_storage_1<d_, Items_, Alloc_, CGAL::Tag_false> >
|
||||||
class Combinatorial_map_base;
|
class Combinatorial_map_base;
|
||||||
|
|
||||||
template < unsigned int d_,
|
template < unsigned int d_,
|
||||||
|
|
@ -43,7 +44,7 @@ template < unsigned int d_,
|
||||||
class Items_=Generic_map_min_items,
|
class Items_=Generic_map_min_items,
|
||||||
#endif
|
#endif
|
||||||
class Alloc_=CGAL_ALLOCATOR(int),
|
class Alloc_=CGAL_ALLOCATOR(int),
|
||||||
class Storage_= Combinatorial_map_storage_1<d_, Items_, Alloc_> >
|
class Storage_= Combinatorial_map_storage_1<d_, Items_, Alloc_, CGAL::Tag_false> >
|
||||||
class Combinatorial_map;
|
class Combinatorial_map;
|
||||||
|
|
||||||
} // CGAL
|
} // CGAL
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#define CGAL_COMBINATORIAL_MAP_STORAGES_H 1
|
#define CGAL_COMBINATORIAL_MAP_STORAGES_H 1
|
||||||
|
|
||||||
#include <CGAL/Compact_container.h>
|
#include <CGAL/Compact_container.h>
|
||||||
|
#include <CGAL/Concurrent_compact_container.h>
|
||||||
#include <CGAL/Dart.h>
|
#include <CGAL/Dart.h>
|
||||||
#include <CGAL/Handle_hash_function.h>
|
#include <CGAL/Handle_hash_function.h>
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
|
|
@ -28,17 +29,20 @@ namespace CGAL {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
template <typename M>
|
template <typename M>
|
||||||
struct Combinatorial_map_helper;
|
struct Combinatorial_map_helper;
|
||||||
|
|
||||||
|
template<typename Concurrent_tag, class T, class Alloc_>
|
||||||
|
struct Container_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @file Combinatorial_map_storages.h
|
/** @file Combinatorial_map_storages.h
|
||||||
* Definition of storages for dD Combinatorial map.
|
* Definition of storages for dD Combinatorial map.
|
||||||
*/
|
*/
|
||||||
// Storage of darts with compact container, beta with handles
|
// Storage of darts with compact container, beta with handles
|
||||||
template<unsigned int d_, class Items_, class Alloc_ >
|
template<unsigned int d_, class Items_, class Alloc_, class Concurrent_tag >
|
||||||
class Combinatorial_map_storage_1
|
class Combinatorial_map_storage_1
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef Combinatorial_map_storage_1<d_, Items_, Alloc_> Self;
|
typedef Combinatorial_map_storage_1<d_, Items_, Alloc_, Concurrent_tag> Self;
|
||||||
typedef CGAL::Tag_false Use_index;
|
typedef CGAL::Tag_false Use_index;
|
||||||
|
|
||||||
typedef internal::Combinatorial_map_helper<Self> Helper;
|
typedef internal::Combinatorial_map_helper<Self> Helper;
|
||||||
|
|
@ -57,7 +61,9 @@ namespace CGAL {
|
||||||
|
|
||||||
typedef std::allocator_traits<Alloc_> Allocator_traits;
|
typedef std::allocator_traits<Alloc_> Allocator_traits;
|
||||||
typedef typename Allocator_traits::template rebind_alloc<Dart> Dart_allocator;
|
typedef typename Allocator_traits::template rebind_alloc<Dart> Dart_allocator;
|
||||||
typedef Compact_container<Dart, Dart_allocator> Dart_container;
|
|
||||||
|
typedef typename internal::Container_type
|
||||||
|
<Concurrent_tag, Dart, Dart_allocator>::type Dart_container;
|
||||||
|
|
||||||
typedef typename Dart_container::iterator Dart_handle;
|
typedef typename Dart_container::iterator Dart_handle;
|
||||||
typedef typename Dart_container::const_iterator Dart_const_handle;
|
typedef typename Dart_container::const_iterator Dart_const_handle;
|
||||||
|
|
@ -70,7 +76,9 @@ namespace CGAL {
|
||||||
typedef Alloc_ Alloc;
|
typedef Alloc_ Alloc;
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct Container_for_attributes :
|
struct Container_for_attributes :
|
||||||
public Compact_container<T, typename std::allocator_traits<Alloc_>::template rebind_alloc<T> >
|
public internal::Container_type
|
||||||
|
<Concurrent_tag, T,
|
||||||
|
typename std::allocator_traits<Alloc_>::template rebind_alloc<T>>::type
|
||||||
{};
|
{};
|
||||||
/// Typedef for attributes
|
/// Typedef for attributes
|
||||||
typedef typename internal::template Get_attributes_tuple<Dart_wrapper>::type
|
typedef typename internal::template Get_attributes_tuple<Dart_wrapper>::type
|
||||||
|
|
@ -425,9 +433,9 @@ namespace CGAL {
|
||||||
};
|
};
|
||||||
|
|
||||||
/// null_handle
|
/// null_handle
|
||||||
template < unsigned int d_, class Items_, class Alloc_ >
|
template < unsigned int d_, class Items_, class Alloc_, class Concurrent_tag >
|
||||||
const typename Combinatorial_map_storage_1<d_, Items_, Alloc_>::Null_handle_type
|
const typename Combinatorial_map_storage_1<d_, Items_, Alloc_, Concurrent_tag>::Null_handle_type
|
||||||
Combinatorial_map_storage_1<d_, Items_, Alloc_>::null_handle = nullptr;
|
Combinatorial_map_storage_1<d_, Items_, Alloc_, Concurrent_tag>::null_handle = nullptr;
|
||||||
|
|
||||||
} // namespace CGAL
|
} // namespace CGAL
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,16 +26,16 @@ namespace CGAL {
|
||||||
template <class, class>
|
template <class, class>
|
||||||
class Concurrent_compact_container;
|
class Concurrent_compact_container;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
class Combinatorial_map_storage_1;
|
class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
class Generalized_map_storage_1;
|
class Generalized_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
class CMap_linear_cell_complex_storage_1;
|
class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
class GMap_linear_cell_complex_storage_1;
|
class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
@ -60,16 +60,16 @@ namespace CGAL {
|
||||||
struct Dart_without_info: public Add_id<WithId>
|
struct Dart_without_info: public Add_id<WithId>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Combinatorial_map_storage_1;
|
friend class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Generalized_map_storage_1;
|
friend class Generalized_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class CMap_linear_cell_complex_storage_1;
|
friend class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class GMap_linear_cell_complex_storage_1;
|
friend class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template <class, class, class, class>
|
template <class, class, class, class>
|
||||||
|
|
@ -210,10 +210,10 @@ namespace CGAL {
|
||||||
template <unsigned int d, typename Refs, class WithID=Tag_false>
|
template <unsigned int d, typename Refs, class WithID=Tag_false>
|
||||||
struct CGAL_DEPRECATED Dart : public Dart_without_info<d, Refs, WithID>
|
struct CGAL_DEPRECATED Dart : public Dart_without_info<d, Refs, WithID>
|
||||||
{
|
{
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Combinatorial_map_storage_1;
|
friend class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class CMap_linear_cell_complex_storage_1;
|
friend class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template <class, class, class, class>
|
template <class, class, class, class>
|
||||||
|
|
@ -310,16 +310,16 @@ namespace CGAL {
|
||||||
struct Dart : public Dart_without_info<d, Refs, WithID>
|
struct Dart : public Dart_without_info<d, Refs, WithID>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Combinatorial_map_storage_1;
|
friend class Combinatorial_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, class, class>
|
template<unsigned int, class, class, class>
|
||||||
friend class Generalized_map_storage_1;
|
friend class Generalized_map_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class CMap_linear_cell_complex_storage_1;
|
friend class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int, unsigned int, class, class, class>
|
template<unsigned int, unsigned int, class, class, class, class>
|
||||||
friend class GMap_linear_cell_complex_storage_1;
|
friend class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template <class, class, class, class>
|
template <class, class, class, class>
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include <CGAL/tuple.h>
|
#include <CGAL/tuple.h>
|
||||||
#include <CGAL/Compact_container.h>
|
#include <CGAL/Compact_container.h>
|
||||||
|
#include <CGAL/Concurrent_compact_container.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include <boost/type_traits/is_same.hpp>
|
#include <boost/type_traits/is_same.hpp>
|
||||||
|
|
@ -593,6 +594,18 @@ namespace CGAL
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Helper class to define container type depending on the Concurrent_tag
|
||||||
|
template<typename Concurrent_tag, class T, class Alloc_>
|
||||||
|
struct Container_type
|
||||||
|
{
|
||||||
|
typedef CGAL::Compact_container<T, Alloc_> type;
|
||||||
|
};
|
||||||
|
template<class T, class Alloc_>
|
||||||
|
struct Container_type<CGAL::Tag_true, T, Alloc_>
|
||||||
|
{
|
||||||
|
typedef CGAL::Concurrent_compact_container<T, Alloc_> type;
|
||||||
|
};
|
||||||
|
|
||||||
} //namespace internal
|
} //namespace internal
|
||||||
|
|
||||||
} //namespace CGAL
|
} //namespace CGAL
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,11 @@
|
||||||
#define GENERALIZED_MAP_FWD_H 1
|
#define GENERALIZED_MAP_FWD_H 1
|
||||||
|
|
||||||
#include <CGAL/memory.h>
|
#include <CGAL/memory.h>
|
||||||
|
#include <CGAL/tags.h>
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
template<unsigned int d_, class Items_, class Alloc_ >
|
template<unsigned int d_, class Items_, class Alloc_, class Concurrent_tag=CGAL::Tag_false >
|
||||||
class Generalized_map_storage_1;
|
class Generalized_map_storage_1;
|
||||||
|
|
||||||
struct Generic_map_min_items;
|
struct Generic_map_min_items;
|
||||||
|
|
@ -24,13 +25,13 @@ struct Generic_map_min_items;
|
||||||
template < unsigned int d_, class Refs,
|
template < unsigned int d_, class Refs,
|
||||||
class Items_=Generic_map_min_items,
|
class Items_=Generic_map_min_items,
|
||||||
class Alloc_=CGAL_ALLOCATOR(int),
|
class Alloc_=CGAL_ALLOCATOR(int),
|
||||||
class Storage_= Generalized_map_storage_1<d_, Items_, Alloc_> >
|
class Storage_= Generalized_map_storage_1<d_, Items_, Alloc_, CGAL::Tag_false> >
|
||||||
class Generalized_map_base;
|
class Generalized_map_base;
|
||||||
|
|
||||||
template < unsigned int d_,
|
template < unsigned int d_,
|
||||||
class Items_=Generic_map_min_items,
|
class Items_=Generic_map_min_items,
|
||||||
class Alloc_=CGAL_ALLOCATOR(int),
|
class Alloc_=CGAL_ALLOCATOR(int),
|
||||||
class Storage_= Generalized_map_storage_1<d_, Items_, Alloc_> >
|
class Storage_= Generalized_map_storage_1<d_, Items_, Alloc_, CGAL::Tag_false> >
|
||||||
class Generalized_map;
|
class Generalized_map;
|
||||||
|
|
||||||
} // CGAL
|
} // CGAL
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#define CGAL_GENERALIZED_MAP_STORAGES_H 1
|
#define CGAL_GENERALIZED_MAP_STORAGES_H 1
|
||||||
|
|
||||||
#include <CGAL/Compact_container.h>
|
#include <CGAL/Compact_container.h>
|
||||||
|
#include <CGAL/Concurrent_compact_container.h>
|
||||||
#include <CGAL/Dart.h>
|
#include <CGAL/Dart.h>
|
||||||
#include <CGAL/Handle_hash_function.h>
|
#include <CGAL/Handle_hash_function.h>
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
|
|
@ -28,6 +29,9 @@ namespace CGAL {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
template <typename M>
|
template <typename M>
|
||||||
struct Combinatorial_map_helper;
|
struct Combinatorial_map_helper;
|
||||||
|
|
||||||
|
template<typename Concurrent_tag, class T, class Alloc_>
|
||||||
|
struct Container_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @file Generalized_map_storages.h
|
/** @file Generalized_map_storages.h
|
||||||
|
|
@ -35,11 +39,11 @@ namespace CGAL {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Storage of darts with compact container, alpha with handles
|
// Storage of darts with compact container, alpha with handles
|
||||||
template<unsigned int d_, class Items_, class Alloc_ >
|
template<unsigned int d_, class Items_, class Alloc_, class Concurrent_tag >
|
||||||
class Generalized_map_storage_1
|
class Generalized_map_storage_1
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef Generalized_map_storage_1<d_, Items_, Alloc_> Self;
|
typedef Generalized_map_storage_1<d_, Items_, Alloc_, Concurrent_tag> Self;
|
||||||
typedef CGAL::Tag_false Use_index;
|
typedef CGAL::Tag_false Use_index;
|
||||||
|
|
||||||
typedef internal::Combinatorial_map_helper<Self> Helper;
|
typedef internal::Combinatorial_map_helper<Self> Helper;
|
||||||
|
|
@ -55,7 +59,9 @@ namespace CGAL {
|
||||||
typedef std::allocator_traits<Alloc_> Allocator_traits;
|
typedef std::allocator_traits<Alloc_> Allocator_traits;
|
||||||
typedef typename Allocator_traits::template rebind_alloc<Dart> Dart_allocator;
|
typedef typename Allocator_traits::template rebind_alloc<Dart> Dart_allocator;
|
||||||
|
|
||||||
typedef Compact_container<Dart, Dart_allocator> Dart_container;
|
typedef typename internal::Container_type
|
||||||
|
<Concurrent_tag, Dart, Dart_allocator>::type Dart_container;
|
||||||
|
|
||||||
|
|
||||||
typedef typename Dart_container::iterator Dart_handle;
|
typedef typename Dart_container::iterator Dart_handle;
|
||||||
typedef typename Dart_container::const_iterator Dart_const_handle;
|
typedef typename Dart_container::const_iterator Dart_const_handle;
|
||||||
|
|
@ -69,7 +75,9 @@ namespace CGAL {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct Container_for_attributes :
|
struct Container_for_attributes :
|
||||||
public Compact_container<T, typename std::allocator_traits<Alloc_>::template rebind_alloc<T> >
|
public internal::Container_type
|
||||||
|
<Concurrent_tag, T,
|
||||||
|
typename std::allocator_traits<Alloc_>::template rebind_alloc<T>>::type
|
||||||
{};
|
{};
|
||||||
/// Typedef for attributes
|
/// Typedef for attributes
|
||||||
typedef typename internal::template Get_attributes_tuple<Dart_wrapper>::type
|
typedef typename internal::template Get_attributes_tuple<Dart_wrapper>::type
|
||||||
|
|
@ -412,9 +420,9 @@ namespace CGAL {
|
||||||
};
|
};
|
||||||
|
|
||||||
/// null_handle
|
/// null_handle
|
||||||
template < unsigned int d_, class Items_, class Alloc_ >
|
template < unsigned int d_, class Items_, class Alloc_, class Concurrent_tag >
|
||||||
const typename Generalized_map_storage_1<d_, Items_, Alloc_>::Null_handle_type
|
const typename Generalized_map_storage_1<d_, Items_, Alloc_, Concurrent_tag>::Null_handle_type
|
||||||
Generalized_map_storage_1<d_, Items_, Alloc_>::null_handle = nullptr;
|
Generalized_map_storage_1<d_, Items_, Alloc_, Concurrent_tag>::null_handle = nullptr;
|
||||||
|
|
||||||
} // namespace CGAL
|
} // namespace CGAL
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#define CGAL_CMAP_LINEAR_CELL_COMPLEX_STORAGES_H 1
|
#define CGAL_CMAP_LINEAR_CELL_COMPLEX_STORAGES_H 1
|
||||||
|
|
||||||
#include <CGAL/Compact_container.h>
|
#include <CGAL/Compact_container.h>
|
||||||
|
#include <CGAL/Concurrent_compact_container.h>
|
||||||
#include <CGAL/Dart.h>
|
#include <CGAL/Dart.h>
|
||||||
#include <CGAL/Handle_hash_function.h>
|
#include <CGAL/Handle_hash_function.h>
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
|
|
@ -28,6 +29,9 @@ namespace CGAL {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
template <typename M>
|
template <typename M>
|
||||||
struct Combinatorial_map_helper;
|
struct Combinatorial_map_helper;
|
||||||
|
|
||||||
|
template<typename Concurrent_tag, class T, class Alloc_>
|
||||||
|
struct Container_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @file CMap_linear_cell_complex_storages.h
|
/** @file CMap_linear_cell_complex_storages.h
|
||||||
|
|
@ -40,7 +44,7 @@ namespace CGAL {
|
||||||
// as template parameter of Dart_wrapper. If we inherit, Self is not
|
// as template parameter of Dart_wrapper. If we inherit, Self is not
|
||||||
// the correct type).
|
// the correct type).
|
||||||
template<unsigned int d_, unsigned int ambient_dim,
|
template<unsigned int d_, unsigned int ambient_dim,
|
||||||
class Traits_, class Items_, class Alloc_ >
|
class Traits_, class Items_, class Alloc_, class Concurrent_tag >
|
||||||
class CMap_linear_cell_complex_storage_1
|
class CMap_linear_cell_complex_storage_1
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -49,7 +53,7 @@ namespace CGAL {
|
||||||
typedef typename Traits_::FT FT;
|
typedef typename Traits_::FT FT;
|
||||||
|
|
||||||
typedef CMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
typedef CMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
||||||
Items_, Alloc_> Self;
|
Items_, Alloc_, Concurrent_tag> Self;
|
||||||
typedef CGAL::Tag_false Use_index;
|
typedef CGAL::Tag_false Use_index;
|
||||||
|
|
||||||
typedef internal::Combinatorial_map_helper<Self> Helper;
|
typedef internal::Combinatorial_map_helper<Self> Helper;
|
||||||
|
|
@ -69,7 +73,8 @@ namespace CGAL {
|
||||||
typedef std::allocator_traits<Alloc_> Allocator_traits;
|
typedef std::allocator_traits<Alloc_> Allocator_traits;
|
||||||
typedef typename Allocator_traits::template rebind_alloc<Dart> Dart_allocator;
|
typedef typename Allocator_traits::template rebind_alloc<Dart> Dart_allocator;
|
||||||
|
|
||||||
typedef Compact_container<Dart, Dart_allocator> Dart_container;
|
typedef typename internal::Container_type
|
||||||
|
<Concurrent_tag, Dart, Dart_allocator>::type Dart_container;
|
||||||
|
|
||||||
typedef typename Dart_container::iterator Dart_handle;
|
typedef typename Dart_container::iterator Dart_handle;
|
||||||
typedef typename Dart_container::const_iterator Dart_const_handle;
|
typedef typename Dart_container::const_iterator Dart_const_handle;
|
||||||
|
|
@ -80,12 +85,12 @@ namespace CGAL {
|
||||||
|
|
||||||
typedef Items_ Items;
|
typedef Items_ Items;
|
||||||
typedef Alloc_ Alloc;
|
typedef Alloc_ Alloc;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct Container_for_attributes :
|
struct Container_for_attributes :
|
||||||
public Compact_container<T, typename std::allocator_traits<Alloc_>::template rebind_alloc<T> >
|
public internal::Container_type
|
||||||
|
<Concurrent_tag, T,
|
||||||
|
typename std::allocator_traits<Alloc_>::template rebind_alloc<T>>::type
|
||||||
{};
|
{};
|
||||||
|
|
||||||
/// Typedef for attributes
|
/// Typedef for attributes
|
||||||
typedef typename internal::template Get_attributes_tuple<Dart_wrapper>::type
|
typedef typename internal::template Get_attributes_tuple<Dart_wrapper>::type
|
||||||
Attributes;
|
Attributes;
|
||||||
|
|
@ -463,11 +468,11 @@ namespace CGAL {
|
||||||
|
|
||||||
/// null_handle
|
/// null_handle
|
||||||
template<unsigned int d_, unsigned int ambient_dim,
|
template<unsigned int d_, unsigned int ambient_dim,
|
||||||
class Traits_, class Items_, class Alloc_ >
|
class Traits_, class Items_, class Alloc_, class Concurrent_tag >
|
||||||
const typename CMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
const typename CMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
||||||
Items_, Alloc_>::Null_handle_type
|
Items_, Alloc_, Concurrent_tag>::Null_handle_type
|
||||||
CMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
CMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
||||||
Items_, Alloc_>::null_handle = nullptr;
|
Items_, Alloc_, Concurrent_tag>::null_handle = nullptr;
|
||||||
|
|
||||||
} // namespace CGAL
|
} // namespace CGAL
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,9 @@ namespace CGAL {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
template <typename M>
|
template <typename M>
|
||||||
struct Combinatorial_map_helper;
|
struct Combinatorial_map_helper;
|
||||||
|
|
||||||
|
template<typename Concurrent_tag, class T, class Alloc_>
|
||||||
|
struct Container_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @file GMap_linear_cell_complex_storages.h
|
/** @file GMap_linear_cell_complex_storages.h
|
||||||
|
|
@ -40,7 +43,7 @@ namespace CGAL {
|
||||||
// as template parameter of Dart_wrapper. If we inherit, Self is not
|
// as template parameter of Dart_wrapper. If we inherit, Self is not
|
||||||
// the correct type).
|
// the correct type).
|
||||||
template<unsigned int d_, unsigned int ambient_dim,
|
template<unsigned int d_, unsigned int ambient_dim,
|
||||||
class Traits_, class Items_, class Alloc_ >
|
class Traits_, class Items_, class Alloc_, class Concurrent_tag >
|
||||||
class GMap_linear_cell_complex_storage_1
|
class GMap_linear_cell_complex_storage_1
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -49,7 +52,7 @@ namespace CGAL {
|
||||||
typedef typename Traits_::FT FT;
|
typedef typename Traits_::FT FT;
|
||||||
|
|
||||||
typedef GMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
typedef GMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
||||||
Items_, Alloc_> Self;
|
Items_, Alloc_, Concurrent_tag> Self;
|
||||||
typedef CGAL::Tag_false Use_index;
|
typedef CGAL::Tag_false Use_index;
|
||||||
|
|
||||||
typedef internal::Combinatorial_map_helper<Self> Helper;
|
typedef internal::Combinatorial_map_helper<Self> Helper;
|
||||||
|
|
@ -65,7 +68,9 @@ namespace CGAL {
|
||||||
typedef std::allocator_traits<Alloc_> Allocator_traits;
|
typedef std::allocator_traits<Alloc_> Allocator_traits;
|
||||||
typedef typename Allocator_traits::template rebind_alloc<Dart> Dart_allocator;
|
typedef typename Allocator_traits::template rebind_alloc<Dart> Dart_allocator;
|
||||||
|
|
||||||
typedef Compact_container<Dart, Dart_allocator> Dart_container;
|
typedef typename internal::Container_type
|
||||||
|
<Concurrent_tag, Dart, Dart_allocator>::type Dart_container;
|
||||||
|
|
||||||
|
|
||||||
typedef typename Dart_container::iterator Dart_handle;
|
typedef typename Dart_container::iterator Dart_handle;
|
||||||
typedef typename Dart_container::const_iterator Dart_const_handle;
|
typedef typename Dart_container::const_iterator Dart_const_handle;
|
||||||
|
|
@ -79,7 +84,9 @@ namespace CGAL {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct Container_for_attributes :
|
struct Container_for_attributes :
|
||||||
public Compact_container<T, typename std::allocator_traits<Alloc_>::template rebind_alloc<T> >
|
public internal::Container_type
|
||||||
|
<Concurrent_tag, T,
|
||||||
|
typename std::allocator_traits<Alloc_>::template rebind_alloc<T>>::type
|
||||||
{};
|
{};
|
||||||
/// Typedef for attributes
|
/// Typedef for attributes
|
||||||
typedef typename internal::template Get_attributes_tuple<Dart_wrapper>::type
|
typedef typename internal::template Get_attributes_tuple<Dart_wrapper>::type
|
||||||
|
|
@ -446,11 +453,11 @@ namespace CGAL {
|
||||||
|
|
||||||
/// null_handle
|
/// null_handle
|
||||||
template <unsigned int d_, unsigned int ambient_dim,
|
template <unsigned int d_, unsigned int ambient_dim,
|
||||||
class Traits_, class Items_, class Alloc_ >
|
class Traits_, class Items_, class Alloc_, class Concurrent_tag >
|
||||||
const typename GMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
const typename GMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
||||||
Items_, Alloc_>::Null_handle_type
|
Items_, Alloc_, Concurrent_tag>::Null_handle_type
|
||||||
GMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
GMap_linear_cell_complex_storage_1<d_, ambient_dim, Traits_,
|
||||||
Items_, Alloc_>::null_handle = nullptr;
|
Items_, Alloc_, Concurrent_tag>::null_handle = nullptr;
|
||||||
} // namespace CGAL
|
} // namespace CGAL
|
||||||
|
|
||||||
#if (BOOST_GCC >= 40900)
|
#if (BOOST_GCC >= 40900)
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,11 @@
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
template<unsigned int d_, unsigned int ambient_dim,
|
template<unsigned int d_, unsigned int ambient_dim,
|
||||||
class Traits_, class Items_, class Alloc_ >
|
class Traits_, class Items_, class Alloc_, class Concurrent_tag=CGAL::Tag_false >
|
||||||
class CMap_linear_cell_complex_storage_1;
|
class CMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template<unsigned int d_, unsigned int ambient_dim,
|
template<unsigned int d_, unsigned int ambient_dim,
|
||||||
class Traits_, class Items_, class Alloc_ >
|
class Traits_, class Items_, class Alloc_, class Concurrent_tag=CGAL::Tag_false >
|
||||||
class GMap_linear_cell_complex_storage_1;
|
class GMap_linear_cell_complex_storage_1;
|
||||||
|
|
||||||
template <unsigned int d>
|
template <unsigned int d>
|
||||||
|
|
@ -62,7 +62,7 @@ template < unsigned int d_, unsigned int ambient_dim = d_,
|
||||||
class CMap = Combinatorial_map_base,
|
class CMap = Combinatorial_map_base,
|
||||||
class Storage_ = CMap_linear_cell_complex_storage_1<d_, ambient_dim,
|
class Storage_ = CMap_linear_cell_complex_storage_1<d_, ambient_dim,
|
||||||
Traits_, Items_,
|
Traits_, Items_,
|
||||||
Alloc_> >
|
Alloc_, CGAL::Tag_false> >
|
||||||
class Linear_cell_complex_for_combinatorial_map;
|
class Linear_cell_complex_for_combinatorial_map;
|
||||||
|
|
||||||
template < unsigned int d_, unsigned int ambient_dim = d_,
|
template < unsigned int d_, unsigned int ambient_dim = d_,
|
||||||
|
|
@ -73,7 +73,7 @@ template < unsigned int d_, unsigned int ambient_dim = d_,
|
||||||
class CMap = Generalized_map_base,
|
class CMap = Generalized_map_base,
|
||||||
class Storage_ = GMap_linear_cell_complex_storage_1<d_, ambient_dim,
|
class Storage_ = GMap_linear_cell_complex_storage_1<d_, ambient_dim,
|
||||||
Traits_, Items_,
|
Traits_, Items_,
|
||||||
Alloc_> >
|
Alloc_, CGAL::Tag_false> >
|
||||||
class Linear_cell_complex_for_generalized_map;
|
class Linear_cell_complex_for_generalized_map;
|
||||||
|
|
||||||
#if !defined(CGAL_NO_DEPRECATED_CODE)
|
#if !defined(CGAL_NO_DEPRECATED_CODE)
|
||||||
|
|
@ -89,7 +89,7 @@ template < unsigned int d_, unsigned int ambient_dim = d_,
|
||||||
class CMap = Combinatorial_map_base,
|
class CMap = Combinatorial_map_base,
|
||||||
class Storage_ = CMap_linear_cell_complex_storage_1<d_, ambient_dim,
|
class Storage_ = CMap_linear_cell_complex_storage_1<d_, ambient_dim,
|
||||||
Traits_, Items_,
|
Traits_, Items_,
|
||||||
Alloc_> >
|
Alloc_, CGAL::Tag_false> >
|
||||||
class Linear_cell_complex;
|
class Linear_cell_complex;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -476,6 +476,42 @@ public:
|
||||||
return m_alloc;
|
return m_alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the index of the iterator "cit", i.e. the number n so that
|
||||||
|
// operator[](n)==*cit.
|
||||||
|
// Complexity : O(#blocks) = O(sqrt(capacity())).
|
||||||
|
// This function is mostly useful for purposes of efficient debugging at
|
||||||
|
// higher levels.
|
||||||
|
size_type index(const_iterator cit) const
|
||||||
|
{
|
||||||
|
// We use the block structure to provide an efficient version :
|
||||||
|
// we check if the address is in the range of each block.
|
||||||
|
|
||||||
|
assert(cit != end());
|
||||||
|
|
||||||
|
const_pointer c = &*cit;
|
||||||
|
size_type res=0;
|
||||||
|
|
||||||
|
Mutex::scoped_lock lock(m_mutex);
|
||||||
|
|
||||||
|
for (typename All_items::const_iterator it = m_all_items.begin(),
|
||||||
|
itend = m_all_items.end(); it != itend; ++it) {
|
||||||
|
const_pointer p = it->first;
|
||||||
|
size_type s = it->second;
|
||||||
|
|
||||||
|
// Are we in the address range of this block (excluding first and last
|
||||||
|
// elements) ?
|
||||||
|
if ( p<c && c<(p+s-1) )
|
||||||
|
{
|
||||||
|
CGAL_assertion_msg( (c-p)+p == c, "wrong alignment of iterator");
|
||||||
|
return res+(c-p-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
res += s-2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (size_type)-1; // cit does not belong to this compact container
|
||||||
|
}
|
||||||
|
|
||||||
// Returns whether the iterator "cit" is in the range [begin(), end()].
|
// Returns whether the iterator "cit" is in the range [begin(), end()].
|
||||||
// Complexity : O(#blocks) = O(sqrt(capacity())).
|
// Complexity : O(#blocks) = O(sqrt(capacity())).
|
||||||
// This function is mostly useful for purposes of efficient debugging at
|
// This function is mostly useful for purposes of efficient debugging at
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue