#pragma once

#include <math.h>
#include <hack/math/math.hpp>
#include "utils/fvec/fvec.hpp"

namespace hr::math
{
  class hann
  {
    public:
      template <typename T>
      void apply(T& target) const 
      { 
        size_t length = hack::math::min(target.size(), m_size);
        for (size_t i = 0; i < length; ++i) target[i] *= m_win[i]; 
      }

      // это применяет окно сомвестно с еще одним вектором
      template <typename T>
      void apply(T& target, T& base) const 
      { 
        uint_t length = hack::math::min(target.size(), hack::math::min(base.size(), m_size));
        for (size_t i = 0; i < length; ++i) target[i] = base[i] * m_win[i]; 
      }

      void creaate(size_t size);

    public:
      size_t m_size;
      fvec_t m_win;
  };
}
