Read egg oven

1,706 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,706
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Read egg oven

  1. 1. PStade.OvenとEggを読む。 @hotwatermorningBoost.勉強会 #6 札幌
  2. 2. はじめに。
  3. 3. はじめに。● この発表の主なターゲット
  4. 4. はじめに。● この発表の主なターゲット● 日常的にBoostを使ってる人or使われている人
  5. 5. はじめに。● この発表の主なターゲット● 日常的にBoostを使ってる人or使われている人● 日常的にPStade.Oven, PStade.Eggを使ってい る人
  6. 6. はじめに。● この発表の主なターゲット● 日常的にBoostを使ってる人or使われている人● 日常的にPStade.Oven, PStade.Eggを使ってい る人● EggやOvenの実装に興味がある人
  7. 7. PStadeとは?
  8. 8. PStadeとは?● Shunsuke Sogame氏によって開発された、 C++ Template Libraryです。 ● Biscuit Parser Library ● Ketchup Message Map Library ● Egg Functional Library ● Oven Range Library などが含まれています。
  9. 9. PStadeとは?● Shunsuke Sogame氏によって開発された、 C++ Template Libraryです。 ● Biscuit Parser Library ● Ketchup Message Map Library ● Egg Functional Library ● Oven Range Library ← 今日はこの2つを 取り上げます などが含まれています。
  10. 10. PStade.Egg● A framework of making function objects. “http://p-stade.sourceforge.net/”● Egg is a small header-only framework of building functions, and offers higher-order functions. “Introduction” “http://p-stade.sourceforge.net/egg/doc/html/”
  11. 11. PStade.Oven● A Boost.Range Extension Library “http://p-stade.sourceforge.net/”● Oven is an advanced implementation of Range Library Proposal “Introduction” “http://p-stade.sourceforge.net/oven/doc/html/”
  12. 12. PStade.Oven● そして、PStade.Ovenの実装には、PStade.Egg が使われています。● なので、Ovenを読もうと思うと、Eggを読む必 要がある。● 逆にEggを読めば、Ovenの理解も進みます。
  13. 13. というわけで、今日は OvenとEggのソースを覗いていきたいと思います。
  14. 14. Ovenの使用例namespace oven = pstade::oven;std::string const x = "ab123cde5f";oven::copy( x | oven::filtered(isalpha) | oven::transformed(toupper), std::ostream_iterator<char>(std::cout) );//outputs : ABCDEF
  15. 15. Ovenの使用例 Rangenamespace oven = pstade::oven;std::string const x = "ab123cde5f";oven::copy( x | oven::filtered(isalpha) | oven::transformed(toupper), std::ostream_iterator<char>(std::cout) );//outputs : ABCDEF
  16. 16. Range● 何らかの値の列の範囲を表す物● 生配列, std::vector, std::list, std::map, boost::array, etc, …● コンテナじゃなくても、例えば指定された範囲 の自然数列を返すcounting rangeなんてものも ある。
  17. 17. Ovenの使用例namespace oven = pstade::oven;std::string const x = "ab123cde5f";oven::copy( Range Adaptor x | oven::filtered(isalpha) | oven::transformed(toupper), std::ostream_iterator<char>(std::cout) );//outputs : ABCDEF
  18. 18. Range Adaptor● Iterator AdaptorのRange版● Rangeを横断しながら、値を変更したりスキッ プしたりして、元のRangeから別のRangeを返 す。● 遅延評価によって、実際にRangeの値が参照さ れるときに、その処理の間に入って働くため、 ● 元のRangeは変更しない。 ● 返されるRangeはいちいち元のRangeを全部コピー しているわけではない。 ● 計算量/空間量的にお得。
  19. 19. Range Adaptor● Range Adaptorはパイプ演算子でつなげていく ことが出来る。 range_ | adaptor1 | adaptor2 | …● 効果が順次適用されていく
  20. 20. Ovenの使用例namespace oven = pstade::oven;std::string const x = "ab123cde5f";oven::copy( x | oven::filtered(isalpha)Range Based Function | oven::transformed(toupper), std::ostream_iterator<char>(std::cout) );//outputs : ABCDEF
  21. 21. Range-Based Function● STLのアルゴリズム(copy, sort, findなど)はイテ レータのbeginとendを引数に取る。● これはIterator-Based Functionと呼ばれる。● 使い勝手があんまりよくない。バグを埋めこん でしまう可能性も高い。● Iteratorのbeginとendをまとめたもの(=Range) を渡せるようにすればより使いやすい。
  22. 22. Range-Based Function● ここら辺については、 ● Exceptional C++ ● プログラミングの魔導書vol.1 ”オーブンレンジクッキング” ● プログラミングの魔導少女 “RangeとPStade.Oven”● などなどに情報があります。
  23. 23. というわけで、これからOvenとEggのソースに 潜っていきます
  24. 24. Ovenの使用例namespace oven = pstade::oven;std::string const x = "ab123cde5f";oven::copy( x | oven::filtered(isalpha) | oven::transformed(toupper), std::ostream_iterator<char>(std::cout) );//outputs : ABCDEF

×