pstade::oven 機能一覧
基本的に、pstade::oven にしかない機能のみ抜粋。
[pstade]
ver 1.04.3
http://p-stade.sourceforge.net/oven/doc/html/index.html
pstade::oven::steps(n)
iterator を移動する際のステップ数を設定。
#include <pstade/oven/steps.hpp> int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; array|pstade::oven::steps(2); // {0, 2, 4, 6, 8}
pstade::oven::concatenated
2次元配列を1次元配列の range にして返す。
#include <pstade/oven/concatenated.hpp> int array[3][3] = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8} }; array|oven::concatenated; // {0, 1, 2, 3, 4, 5, 6, 7, 8}
pstade::oven::rows(height, width)
pstade::oven::rows(height, width) は、range を2次元配列のような形にして返します。
#include <pstade/oven/matrix.hpp> int array[] = { 0, 1, 2, 3, 4, 5 }; array|oven::rows(2, 3); // { {0, 1, 2}, {3, 4, 5} }
pstade::oven::at(n)
n 番目の要素を返します。
#include <pstade/oven/at.hpp> int array[] = {0, 1, 2, 3, 4}; assert( (array|oven::at(3)) == array[3] );
pstade::oven::copied
他のコンテナ型へ代入可能な range を返すアダプタです。
#include <pstade/oven/copied.hpp> int array[] = {0, 1, 2, 3, 4}; std::vector<int> array2 = array|oven::copied; std::list<int> array3 = array|oven::copied; assert( boost::equal(array2, array3) );
pstade/oven/io.hpp
range の標準出力を行ないます。
#include <pstade/oven/io.hpp> int array[] = {0, 1, 2, 3, 4}; std::cout << oven::make_iter_range(array) << std::endl;
[出力]
{0,1,2,3,4}
pstade::oven::cycled(n)
range を引数の回数分展開するアダプタです。
#include <pstade/oven/cycled.hpp> int array[] = {0, 1, 2}; array|oven::cycled(3); // {0, 1, 2, 0, 1, 2, 0, 1, 2}
pstade::oven::zipped
tuple
#include <pstade/oven/zipped.hpp> int array1[] = {0, 1, 2, 3, 4}; char array2[] = {'a', 'b', 'c', 'd', 'e'}; boost::make_tuple(array1, array2); // ({0,1,2,3,4} {a,b,c,d,e}) boost::make_tuple(array1, array2)|oven::zipped; // {(0 a),(1 b),(2 c),(3 d),(4 e)}
pstade::oven::any_range
あらゆる range を格納することが出来る範囲型。
#include <pstade/oven/any_range.hpp> int array[] = {0, 1, 2, 3, 4}; // 保持する値の型と iterator のタイプを指定する oven::any_range<int, boost::forward_traversal_tag> range = array|oven::transformed(lambda::_1 + lambda::_1); std::cout << range << std::endl;
pstade::oven::initial_values
range の初期化を行います。
#include <pstade/oven/initial_values.hpp> std::vector<int> array = oven::initial_values(0, 1, 2, 3, 4); array; // {0, 1, 2, 3, 4}
pstade::oven::window(n, m)
begin(range)+n〜begin(range)+m の範囲を返すアダプタです。
#include <pstade/oven/window.hpp> int array[] = {0, 1, 2, 3, 4, 5, 6}; array|oven::window(1, 5); // {1, 2, 3, 4}
pstade::oven::offset(n, m)
begin(range)+n〜end(range)+m の範囲を返すアダプタです。
#include <pstade/oven/offset.hpp> int array[] = {0, 1, 2, 3, 4, 5, 6}; array|oven::offset(1, -2); // {1, 2, 3, 4}
pstade::oven::dropped(n)
pstade::oven::dropped(n) は、range の先頭から n 個分の要素を取り除いた range を返すアダプタです。
#include <pstade/oven/dropped.hpp> int array[] = {0, 1, 2, 3, 4, 5, 6, 7}; array|pstade::oven::dropped(3); / {3,4,5,6,7}
pstade::oven::single(x)
pstade::oven::single(x) は、x を range にして返します。
#include <pstade/oven/single.hpp> boost::equal(oven::single('F'), std::string("F"));