diff --git a/Spatial_searching/benchmark/Spatial_searching/CMakeLists.txt b/Spatial_searching/benchmark/Spatial_searching/CMakeLists.txt index 90c022e4439..a22e5fe615d 100644 --- a/Spatial_searching/benchmark/Spatial_searching/CMakeLists.txt +++ b/Spatial_searching/benchmark/Spatial_searching/CMakeLists.txt @@ -36,6 +36,7 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "nn3cgal.cpp" ) create_single_source_cgal_program( "nn3nanoflan.cpp" ) create_single_source_cgal_program( "sizeof.cpp" ) +create_single_source_cgal_program( "deque.cpp" ) else() diff --git a/Spatial_searching/benchmark/Spatial_searching/deque.cpp b/Spatial_searching/benchmark/Spatial_searching/deque.cpp new file mode 100644 index 00000000000..a0a3e40d975 --- /dev/null +++ b/Spatial_searching/benchmark/Spatial_searching/deque.cpp @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include +#include + +struct X { + double a,b,c,d,e,f,g,h,i,j,k,l; +}; + +int main() +{ + CGAL::Memory_sizer ms; + CGAL::Timer t; + char c; + t.start(); +#if 0 + + CGAL::Block_list de; +#elif 1 + std::deque de; +#else + std::vector de; + de.reserve(100000000); +#endif + + for(int i=0; i < 100000000; i++){ + de.push_back(X()); + } + t.stop(); + std::cout << t.time() << "sec"<< std::endl; + std::cout << ms.virtual_size() << " " << ms.resident_size() << std::endl; + + std::cout << "cont>" << std::endl; + std::cin >> c; + return 0; +} diff --git a/Spatial_searching/include/CGAL/Block_list.h b/Spatial_searching/include/CGAL/Block_list.h new file mode 100644 index 00000000000..a0b215175aa --- /dev/null +++ b/Spatial_searching/include/CGAL/Block_list.h @@ -0,0 +1,58 @@ +#ifndef CGAL_BLOCKLIST_H +#define CGAL_BLOCKLIST_H + +#include + +#include + +namespace CGAL { + + template < typename T, int N> + class Block_list{ + typedef CGAL::cpp11::array Block; + int index; + std::list blocks; + + public: + Block_list() + : index(N) + {} + + T* push_back(const T& t) + { + if(index==N){ + Block b; + blocks.push_back(b); + index = 0; + } + Block& b = blocks.back(); + b[index] = t; + T* ptr = &b[index]; + ++index; + return ptr; + } + + void clear() + { + blocks.clear(); + index = N; + } + + void print(std::ostream& os) + { + std::size_t s = blocks.size(); + std::size_t i = 0; + for(std::list::iterator it = blocks.begin(); it!= blocks.end(); ++it, ++i){ + Block& b = *it; + os << "Block "<< i << std::endl; + std::size_t n = (i+1 == s)? index : N; + for(std::size_t j=0; j < n; j++){ + os << b[j] << std::endl; + } + } + } +}; + +} // namespace CGAL + +#endif