Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Read egg oven

1.917 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Login to see the comments

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

×