]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Use std_cxx20::ranges::iota_range.
authorWolfgang Bangerth <bangerth@colostate.edu>
Sat, 2 May 2020 18:08:49 +0000 (12:08 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Thu, 7 May 2020 12:41:54 +0000 (06:41 -0600)
examples/step-69/step-69.cc
include/deal.II/base/geometry_info.h
include/deal.II/fe/fe_values.h

index a1906f05dcb2fd3987f55349628a594406e34168..e530648acf21f51d09e36ab872fd0cd6162d4435 100644 (file)
@@ -78,9 +78,9 @@
 #include <boost/archive/binary_iarchive.hpp>
 #include <boost/archive/binary_oarchive.hpp>
 
-// The last two boost header files are for creating custom iterator ranges
+// The last two header files are for creating custom iterator ranges
 // over integer intervals.
-#include <boost/range/irange.hpp>
+#include <deal.II/base/std_cxx20/iota_view.h>
 #include <boost/range/iterator_range.hpp>
 
 // For std::isnan, std::isinf, std::ifstream, std::async, and std::future
@@ -1225,7 +1225,8 @@ namespace Step69
     // defined by the <code>indices.begin()</code> and
     // <code>indices.end()</code> iterators into subranges (we want to be
     // able to read any entry in those subranges with constant complexity).
-    // In order to provide such iterators we resort to boost::irange.
+    // In order to provide such iterators we resort to
+    // std_cxx20::ranges::iota_view.
     //
     // The bulk of the following piece of code is spent defining
     // the "worker" <code>on_subranges</code>: i.e. the  operation applied at
@@ -1252,10 +1253,10 @@ namespace Step69
     //
     // We have one more difficulty to overcome: In order to implement the
     // <code>on_subranges</code> lambda we need to name the iterator type
-    // of the object returned by <code>boost::irange%<unsigned
+    // of the object returned by <code>std_cxx20::ranges::iota_view%<unsigned
     // int%>()</code>. This is unfortunately a very convoluted name exposing
-    // implementation details about <code>boost::irange</code>. For this
-    // reason we resort to the <a
+    // implementation details about <code>std_cxx20::ranges::iota_view</code>.
+    // For this reason we resort to the <a
     // href="https://en.cppreference.com/w/cpp/language/decltype"><code>decltype</code></a>
     // specifier, a C++11 feature that returns the type of an entity, or
     // expression.
@@ -1263,12 +1264,14 @@ namespace Step69
       TimerOutput::Scope scope(computing_timer,
                                "offline_data - compute |c_ij|, and n_ij");
 
-      const auto indices = boost::irange<unsigned int>(0, n_locally_relevant);
+      const std_cxx20::ranges::iota_view<unsigned int> indices(
+        0, n_locally_relevant);
 
       const auto on_subranges = //
-        [&](typename decltype(indices)::iterator       i1,
-            const typename decltype(indices)::iterator i2) {
-          for (const auto row_index : boost::make_iterator_range(i1, i2))
+        [&](std_cxx20::ranges::iota_view<unsigned int>::iterator       i1,
+            const std_cxx20::ranges::iota_view<unsigned int>::iterator i2) {
+          for (const auto row_index :
+               std_cxx20::ranges::iota_view<unsigned int>(*i1, *i2))
             {
               // First column-loop: we compute and store the entries of the
               // matrix norm_matrix and write normalized entries into the
@@ -1870,9 +1873,10 @@ namespace Step69
     const auto &n_locally_owned    = offline_data->n_locally_owned;
     const auto &n_locally_relevant = offline_data->n_locally_relevant;
 
-    const auto indices_owned = boost::irange<unsigned int>(0, n_locally_owned);
-    const auto indices_relevant =
-      boost::irange<unsigned int>(0, n_locally_relevant);
+    const std_cxx20::ranges::iota_view<unsigned int> indices_owned(
+      0, n_locally_owned);
+    const std_cxx20::ranges::iota_view<unsigned int> indices_relevant(
+      0, n_locally_relevant);
 
     const auto &sparsity = offline_data->sparsity_pattern;
 
@@ -1926,9 +1930,10 @@ namespace Step69
                                "time_stepping - 1 compute d_ij");
 
       const auto on_subranges = //
-        [&](typename decltype(indices_relevant)::iterator       i1,
-            const typename decltype(indices_relevant)::iterator i2) {
-          for (const auto i : boost::make_iterator_range(i1, i2))
+        [&](std_cxx20::ranges::iota_view<unsigned int>::iterator       i1,
+            const std_cxx20::ranges::iota_view<unsigned int>::iterator i2) {
+          for (const auto i :
+               std_cxx20::ranges::iota_view<unsigned int>(*i1, *i2))
             {
               const auto U_i = gather(U, i);
 
@@ -2021,11 +2026,12 @@ namespace Step69
       // locally.
 
       const auto on_subranges = //
-        [&](typename decltype(indices_relevant)::iterator       i1,
-            const typename decltype(indices_relevant)::iterator i2) {
+        [&](std_cxx20::ranges::iota_view<unsigned int>::iterator       i1,
+            const std_cxx20::ranges::iota_view<unsigned int>::iterator i2) {
           double tau_max_on_subrange = std::numeric_limits<double>::infinity();
 
-          for (const auto i : boost::make_iterator_range(i1, i2))
+          for (const auto i :
+               std_cxx20::ranges::iota_view<unsigned int>(*i1, *i2))
             {
               double d_sum = 0.;
 
@@ -2344,7 +2350,8 @@ namespace Step69
     const auto &boundary_normal_map = offline_data->boundary_normal_map;
     const auto &n_locally_owned     = offline_data->n_locally_owned;
 
-    const auto indices = boost::irange<unsigned int>(0, n_locally_owned);
+    const auto indices =
+      std_cxx20::ranges::iota_view<unsigned int>(0, n_locally_owned);
 
     // We define the r_i_max and r_i_min in the current MPI process as
     // atomic doubles in order to avoid race conditions between threads:
index 1f15383965ffbe746fe7780bb48f893d4b1c6a05..d8ea7c5e4e0f8030821882fbf408cde8d5a173f6 100644 (file)
@@ -21,8 +21,7 @@
 
 #include <deal.II/base/exceptions.h>
 #include <deal.II/base/point.h>
-
-#include <boost/range/irange.hpp>
+#include <deal.II/base/std_cxx20/iota_view.h>
 
 #include <array>
 #include <cstdint>
@@ -1947,7 +1946,7 @@ struct GeometryInfo
    * taking on all valid indices for faces (zero and one in 1d, zero
    * through three in 2d, and zero through 5 in 3d).
    */
-  static boost::integer_range<unsigned int>
+  static std_cxx20::ranges::iota_view<unsigned int>
   face_indices();
 
   /**
@@ -1978,7 +1977,7 @@ struct GeometryInfo
    * Here, we are looping over all vertices of all cells, with `vertex_index`
    * taking on all valid indices.
    */
-  static boost::integer_range<unsigned int>
+  static std_cxx20::ranges::iota_view<unsigned int>
   vertex_indices();
 
   /**
@@ -2833,19 +2832,19 @@ GeometryInfo<0>::vertex_indices()
 
 
 template <int dim>
-inline boost::integer_range<unsigned int>
+inline std_cxx20::ranges::iota_view<unsigned int>
 GeometryInfo<dim>::face_indices()
 {
-  return boost::irange(0U, faces_per_cell);
+  return std_cxx20::ranges::iota_view<unsigned int>(0U, faces_per_cell);
 }
 
 
 
 template <int dim>
-inline boost::integer_range<unsigned int>
+inline std_cxx20::ranges::iota_view<unsigned int>
 GeometryInfo<dim>::vertex_indices()
 {
-  return boost::irange(0U, vertices_per_cell);
+  return std_cxx20::ranges::iota_view<unsigned int>(0U, vertices_per_cell);
 }
 
 
index 452f4a2f43e7467805cc6509decbea794a76a1cf..59aa92b46c8213e4e2cfe602b78d9876ae4abf4f 100644 (file)
@@ -23,6 +23,7 @@
 #include <deal.II/base/exceptions.h>
 #include <deal.II/base/point.h>
 #include <deal.II/base/quadrature.h>
+#include <deal.II/base/std_cxx20/iota_view.h>
 #include <deal.II/base/subscriptor.h>
 #include <deal.II/base/symmetric_tensor.h>
 
@@ -39,8 +40,6 @@
 
 #include <deal.II/hp/dof_handler.h>
 
-#include <boost/range/irange.hpp>
-
 #include <algorithm>
 #include <memory>
 #include <type_traits>
@@ -3031,7 +3030,7 @@ public:
    * `q_point` taking on all valid indices for quadrature points, as defined
    * by the quadrature rule passed to `fe_values`.
    */
-  boost::integer_range<unsigned int>
+  std_cxx20::ranges::iota_view<unsigned int>
   quadrature_point_indices() const;
 
   /**
@@ -5562,10 +5561,10 @@ FEValuesBase<dim, spacedim>::dof_indices_ending_at(
 
 
 template <int dim, int spacedim>
-inline boost::integer_range<unsigned int>
+inline std_cxx20::ranges::iota_view<unsigned int>
 FEValuesBase<dim, spacedim>::quadrature_point_indices() const
 {
-  return boost::irange(0U, n_quadrature_points);
+  return std_cxx20::ranges::iota_view<unsigned int>(0U, n_quadrature_points);
 }
 
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.