]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/include/parallel/for_each_selectors.h
multiway_merge.h: Reformat to 80 columns; adjust some inline specifiers; other minor...
[thirdparty/gcc.git] / libstdc++-v3 / include / parallel / for_each_selectors.h
index b38aded5cb325296b01b12aecf77c9802189bee6..eaa55fc05c60e3f36a777ae4d1521138b5e83865 100644 (file)
@@ -57,231 +57,234 @@ namespace __gnu_parallel
 
   /** @brief std::for_each() selector. */
   template<typename It>
-  struct for_each_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param o Operator.
-     *  @param i Iterator referencing object. */
-    template<typename Op>
-      bool
-      operator()(Op& o, It i)
-      {
-       o(*i);
-       return true;
-      }
-  };
+    struct for_each_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param o Operator.
+       *  @param i Iterator referencing object. */
+      template<typename Op>
+        bool
+        operator()(Op& o, It i)
+       {
+         o(*i);
+         return true;
+       }
+    };
 
   /** @brief std::generate() selector. */
   template<typename It>
-  struct generate_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param o Operator.
-     *  @param i Iterator referencing object. */
-    template<typename Op>
-      bool
-      operator()(Op& o, It i)
-      {
-       *i = o();
-       return true;
-      }
-  };
+    struct generate_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param o Operator.
+       *  @param i Iterator referencing object. */
+      template<typename Op>
+        bool
+        operator()(Op& o, It i)
+        {
+         *i = o();
+         return true;
+       }
+    };
 
   /** @brief std::fill() selector. */
   template<typename It>
-  struct fill_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param v Current value.
-     *  @param i Iterator referencing object. */
-    template<typename Val>
-      bool
-      operator()(Val& v, It i)
-      {
-       *i = v;
-       return true;
-      }
-  };
+    struct fill_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param v Current value.
+       *  @param i Iterator referencing object. */
+      template<typename Val>
+        bool
+        operator()(Val& v, It i)
+       {
+         *i = v;
+         return true;
+       }
+    };
 
   /** @brief std::transform() selector, one input sequence variant. */
   template<typename It>
-  struct transform1_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param o Operator.
-     *  @param i Iterator referencing object. */
-    template<typename Op>
-      bool
-      operator()(Op& o, It i)
-      {
-       *i.second = o(*i.first);
-       return true;
-      }
-  };
+    struct transform1_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param o Operator.
+       *  @param i Iterator referencing object. */
+      template<typename Op>
+        bool
+        operator()(Op& o, It i)
+       {
+         *i.second = o(*i.first);
+         return true;
+       }
+    };
 
   /** @brief std::transform() selector, two input sequences variant. */
   template<typename It>
-  struct transform2_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param o Operator.
-     *  @param i Iterator referencing object. */
-    template<typename Op>
-      bool
-      operator()(Op& o, It i)
-      {
-       *i.third = o(*i.first, *i.second);
-       return true;
-      }
-  };
+    struct transform2_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param o Operator.
+       *  @param i Iterator referencing object. */
+      template<typename Op>
+        bool
+        operator()(Op& o, It i)
+       {
+         *i.third = o(*i.first, *i.second);
+         return true;
+       }
+    };
 
   /** @brief std::replace() selector. */
   template<typename It, typename T>
-  struct replace_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Value to replace with. */
-    const T& new_val;
+    struct replace_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Value to replace with. */
+      const T& new_val;
 
-    /** @brief Constructor
-     *  @param new_val Value to replace with. */
-    explicit replace_selector(const T &new_val) : new_val(new_val) {}
+      /** @brief Constructor
+       *  @param new_val Value to replace with. */
+      explicit
+      replace_selector(const T &new_val) : new_val(new_val) {}
 
-    /** @brief Functor execution.
-     *  @param v Current value.
-     *  @param i Iterator referencing object. */
-    bool
-    operator()(T& v, It i)
-    {
-      if (*i == v)
-       *i = new_val;
-      return true;
-    }
-  };
+      /** @brief Functor execution.
+       *  @param v Current value.
+       *  @param i Iterator referencing object. */
+      bool
+      operator()(T& v, It i)
+      {
+       if (*i == v)
+         *i = new_val;
+       return true;
+      }
+    };
 
   /** @brief std::replace() selector. */
   template<typename It, typename Op, typename T>
-  struct replace_if_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Value to replace with. */
-    const T& new_val;
+    struct replace_if_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Value to replace with. */
+      const T& new_val;
 
-    /** @brief Constructor.
-     *  @param new_val Value to replace with. */
-    explicit replace_if_selector(const T &new_val) : new_val(new_val) { }
+      /** @brief Constructor.
+       *  @param new_val Value to replace with. */
+      explicit
+      replace_if_selector(const T &new_val) : new_val(new_val) { }
 
-    /** @brief Functor execution.
-     *  @param o Operator.
-     *  @param i Iterator referencing object. */
-    bool
-    operator()(Op& o, It i)
-    {
-      if (o(*i))
-       *i = new_val;
-      return true;
-    }
-  };
+      /** @brief Functor execution.
+       *  @param o Operator.
+       *  @param i Iterator referencing object. */
+      bool
+      operator()(Op& o, It i)
+      {
+       if (o(*i))
+         *i = new_val;
+       return true;
+      }
+    };
 
   /** @brief std::count() selector. */
   template<typename It, typename Diff>
-  struct count_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param v Current value.
-     *  @param i Iterator referencing object.
-     *  @return 1 if count, 0 if does not count. */
-    template<typename Val>
-      Diff
-      operator()(Val& v, It i)
-      { return (v == *i) ? 1 : 0; }
-  };
+    struct count_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param v Current value.
+       *  @param i Iterator referencing object.
+       *  @return 1 if count, 0 if does not count. */
+      template<typename Val>
+        Diff
+        operator()(Val& v, It i)
+       { return (v == *i) ? 1 : 0; }
+    };
 
   /** @brief std::count_if () selector. */
   template<typename It, typename Diff>
-  struct count_if_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param o Operator.
-     *  @param i Iterator referencing object.
-     *  @return 1 if count, 0 if does not count. */
-    template<typename Op>
-      Diff
-      operator()(Op& o, It i)
-      { return (o(*i)) ? 1 : 0; }
-  };
+    struct count_if_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param o Operator.
+       *  @param i Iterator referencing object.
+       *  @return 1 if count, 0 if does not count. */
+      template<typename Op>
+        Diff
+        operator()(Op& o, It i)
+       { return (o(*i)) ? 1 : 0; }
+    };
 
   /** @brief std::accumulate() selector. */
   template<typename It>
-  struct accumulate_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param o Operator (unused).
-     *  @param i Iterator referencing object.
-     *  @return The current value. */
-    template<typename Op>
-      typename std::iterator_traits<It>::value_type operator()(Op o, It i)
-      { return *i; }
-  };
+    struct accumulate_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param o Operator (unused).
+       *  @param i Iterator referencing object.
+       *  @return The current value. */
+      template<typename Op>
+        typename std::iterator_traits<It>::value_type operator()(Op o, It i)
+       { return *i; }
+    };
 
   /** @brief std::inner_product() selector. */
   template<typename It, typename It2, typename T>
-  struct inner_product_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Begin iterator of first sequence. */
-    It begin1_iterator;
-
-    /** @brief Begin iterator of second sequence. */
-    It2 begin2_iterator;
-
-    /** @brief Constructor.
-     *  @param b1 Begin iterator of first sequence.
-     *  @param b2 Begin iterator of second sequence. */
-    explicit inner_product_selector(It b1, It2 b2)
-    : begin1_iterator(b1), begin2_iterator(b2) { }
-
-    /** @brief Functor execution.
-     *  @param mult Multiplication functor.
-     *  @param current Iterator referencing object.
-     *  @return Inner product elemental result. */
-    template<typename Op>
-      T
-      operator()(Op mult, It current)
-      {
-       typename std::iterator_traits<It>::difference_type position
-         = current - begin1_iterator;
-       return mult(*current, *(begin2_iterator + position));
-      }
-  };
+    struct inner_product_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Begin iterator of first sequence. */
+      It begin1_iterator;
+
+      /** @brief Begin iterator of second sequence. */
+      It2 begin2_iterator;
+
+      /** @brief Constructor.
+       *  @param b1 Begin iterator of first sequence.
+       *  @param b2 Begin iterator of second sequence. */
+      explicit
+      inner_product_selector(It b1, It2 b2)
+      : begin1_iterator(b1), begin2_iterator(b2) { }
+
+      /** @brief Functor execution.
+       *  @param mult Multiplication functor.
+       *  @param current Iterator referencing object.
+       *  @return Inner product elemental result. */
+      template<typename Op>
+        T
+        operator()(Op mult, It current)
+       {
+         typename std::iterator_traits<It>::difference_type position
+           = current - begin1_iterator;
+         return mult(*current, *(begin2_iterator + position));
+       }
+    };
 
   /** @brief Selector that just returns the passed iterator. */
   template<typename It>
-  struct identity_selector : public generic_for_each_selector<It>
-  {
-    /** @brief Functor execution.
-     *  @param o Operator (unused).
-     *  @param i Iterator referencing object.
-     *  @return Passed iterator. */
-    template<typename Op>
-      It
-      operator()(Op o, It i)
-      { return i; }
-  };
+    struct identity_selector : public generic_for_each_selector<It>
+    {
+      /** @brief Functor execution.
+       *  @param o Operator (unused).
+       *  @param i Iterator referencing object.
+       *  @return Passed iterator. */
+      template<typename Op>
+        It
+        operator()(Op o, It i)
+       { return i; }
+    };
 
   /** @brief Selector that returns the difference between two adjacent
    *  elements.
    */
   template<typename It>
-  struct adjacent_difference_selector : public generic_for_each_selector<It>
-  {
-    template<typename Op>
-      bool
-      operator()(Op& o, It i)
-      {
-       typename It::first_type go_back_one = i.first;
-       --go_back_one;
-       *i.second = o(*i.first, *go_back_one);
-       return true;
-      }
-  };
+    struct adjacent_difference_selector : public generic_for_each_selector<It>
+    {
+      template<typename Op>
+        bool
+        operator()(Op& o, It i)
+       {
+         typename It::first_type go_back_one = i.first;
+         --go_back_one;
+         *i.second = o(*i.first, *go_back_one);
+         return true;
+       }
+    };
 
   // XXX move into type_traits?
   /** @brief Functor doing nothing
@@ -308,55 +311,56 @@ namespace __gnu_parallel
 
   /** @brief Reduction for finding the maximum element, using a comparator. */
   template<typename Comp, typename It>
-  struct min_element_reduct
-  {
-    Comp& comp;
+    struct min_element_reduct
+    {
+      Comp& comp;
 
-    explicit min_element_reduct(Comp &c) : comp(c)
-    { }
+      explicit
+      min_element_reduct(Comp &c) : comp(c) { }
 
-    It
-    operator()(It x, It y)
-    {
-      if (comp(*x, *y))
-       return x;
-      else
-       return y;
-    }
-  };
+      It
+      operator()(It x, It y)
+      {
+       if (comp(*x, *y))
+         return x;
+       else
+         return y;
+      }
+    };
 
   /** @brief Reduction for finding the maximum element, using a comparator. */
   template<typename Comp, typename It>
-  struct max_element_reduct
-  {
-    Comp& comp;
+    struct max_element_reduct
+    {
+      Comp& comp;
 
-    explicit max_element_reduct(Comp& c) : comp(c)
-    { }
+      explicit
+      max_element_reduct(Comp& c) : comp(c) { }
 
-    It
-    operator()(It x, It y)
-    {
-      if (comp(*x, *y))
-       return y;
-      else
-       return x;
-    }
-  };
+      It
+      operator()(It x, It y)
+      {
+       if (comp(*x, *y))
+         return y;
+       else
+         return x;
+      }
+    };
 
   /** @brief General reduction, using a binary operator. */
   template<typename BinOp>
-  struct accumulate_binop_reduct
-  {
-    BinOp& binop;
+    struct accumulate_binop_reduct
+    {
+      BinOp& binop;
 
-    explicit accumulate_binop_reduct(BinOp& b) : binop(b) {}
+      explicit
+      accumulate_binop_reduct(BinOp& b) : binop(b) { }
 
-    template<typename Result, typename Addend>
-      Result
-      operator()(const Result& x, const Addend& y)
-      { return binop(x, y); }
-  };
+      template<typename Result, typename Addend>
+        Result
+        operator()(const Result& x, const Addend& y)
+       { return binop(x, y); }
+    };
 }
 
 #endif