pstade::oven::memoizedを移植

※このコードは開発中のものです。


メモ化のための、PStade.Ovenのmemoized RangeアダプタをBoost.Rangeのインタフェース/実装に合わせるよう移植しました。
ほぼそのまま持ってきただけです。

#include <iostream>
#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/adaptor/filtered.hpp>
#include <boost/range/adaptor/memoized.hpp>
#include <boost/range/algorithm/for_each.hpp>

int add(int x)
{
    std::cout << "add function : " << x << std::endl;
    return x + 1;
}

bool pred(int x)
{
    return true;
}

void disp(int x)
{
    std::cout << x << std::endl;
}

int main()
{
    using namespace boost::adaptors;

    const int ar[] = {1, 2, 3};
    boost::for_each(ar | transformed(add) | memoized | filtered(pred), disp);
}
add function : 1
2
add function : 2
3
add function : 3
4

コードはgithubに上がっています。
https://github.com/faithandbrave/OvenToBoost/


# 日本語のドキュメントが文字化けしてるのであとで直します・・・。