Changeset 1523 for trunk/yat


Ignore:
Timestamp:
Sep 23, 2008, 7:32:49 PM (13 years ago)
Author:
Peter
Message:

fixes #442

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/yat/normalizer/Centralizer.h

    r1497 r1523  
    2222
    2323#include "yat/statistics/Average.h"
     24#include "yat/utility/DataIterator.h"
     25#include "yat/utility/iterator_traits.h"
     26#include "yat/utility/WeightIterator.h"
    2427
    2528#include <algorithm>
     
    7376                              OutputIterator result) const
    7477    {
     78      typename utility::weighted_iterator_traits<InputIterator>::type tag;
     79      return normalize(first, last, result, tag);
     80                       
     81    }
     82
     83  private:
     84    UnaryFunction func_;
     85
     86    // unweighted version
     87    template<class InputIterator, class OutputIterator>
     88    OutputIterator normalize(InputIterator first, InputIterator last,
     89                             OutputIterator result,
     90                             utility::unweighted_iterator_tag tag) const
     91    {
    7592      return std::transform(first, last,
    7693                            result, std::bind2nd(std::minus<double>(),
     
    7895    }
    7996
    80   private:
    81     UnaryFunction func_;
     97
     98    // weighted version
     99    template<class InputIterator, class OutputIterator>
     100    OutputIterator normalize(InputIterator first, InputIterator last,
     101                             OutputIterator result,
     102                             utility::weighted_iterator_tag tag) const
     103    {
     104      std::copy(utility::weight_iterator(first),
     105                utility::weight_iterator(last),
     106                utility::weight_iterator(result));
     107      std::transform(utility::data_iterator(first),
     108                     utility::data_iterator(last),
     109                     utility::data_iterator(result),
     110                     std::bind2nd(std::minus<double>(),
     111                                  func_(first, last)));
     112      return result + std::distance(first, last);
     113    }
     114
    82115  };
    83116
Note: See TracChangeset for help on using the changeset viewer.