Program Listing for File normalize.hpp

Return to documentation for file (include/uitsl/algorithm/normalize.hpp)

#pragma once
#ifndef UITSL_ALGORITHM_NORMALIZE_HPP_INCLUDE
#define UITSL_ALGORITHM_NORMALIZE_HPP_INCLUDE

#include <algorithm>
#include <numeric>
#include <type_traits>

namespace uitsl {

template<class InputIt>
constexpr void normalize(InputIt first, InputIt last) {

  using value_t = typename std::decay_t<decltype(*first)>;

  const value_t sum = std::accumulate( first, last, value_t{} );

  if (sum) std::transform(
    first, last, first, [sum](const value_t val){ return val/sum; }
  );

}

} // namespace uitsl

#endif // #ifndef UITSL_ALGORITHM_NORMALIZE_HPP_INCLUDE