Your SlideShare is downloading. ×
0
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Read egg oven
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Read egg oven

1,281

Published on

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

No Downloads
Views
Total Views
1,281
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. PStade.OvenとEggを読む。 @hotwatermorningBoost.勉強会 #6 札幌
  • 2. はじめに。
  • 3. はじめに。● この発表の主なターゲット
  • 4. はじめに。● この発表の主なターゲット● 日常的にBoostを使ってる人or使われている人
  • 5. はじめに。● この発表の主なターゲット● 日常的にBoostを使ってる人or使われている人● 日常的にPStade.Oven, PStade.Eggを使ってい る人
  • 6. はじめに。● この発表の主なターゲット● 日常的にBoostを使ってる人or使われている人● 日常的にPStade.Oven, PStade.Eggを使ってい る人● EggやOvenの実装に興味がある人
  • 7. PStadeとは?
  • 8. PStadeとは?● Shunsuke Sogame氏によって開発された、 C++ Template Libraryです。 ● Biscuit Parser Library ● Ketchup Message Map Library ● Egg Functional Library ● Oven Range Library などが含まれています。
  • 9. PStadeとは?● Shunsuke Sogame氏によって開発された、 C++ Template Libraryです。 ● Biscuit Parser Library ● Ketchup Message Map Library ● Egg Functional Library ● Oven Range Library ← 今日はこの2つを 取り上げます などが含まれています。
  • 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. 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. PStade.Oven● そして、PStade.Ovenの実装には、PStade.Egg が使われています。● なので、Ovenを読もうと思うと、Eggを読む必 要がある。● 逆にEggを読めば、Ovenの理解も進みます。
  • 13. というわけで、今日は OvenとEggのソースを覗いていきたいと思います。
  • 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. 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. Range● 何らかの値の列の範囲を表す物● 生配列, std::vector, std::list, std::map, boost::array, etc, …● コンテナじゃなくても、例えば指定された範囲 の自然数列を返すcounting rangeなんてものも ある。
  • 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. Range Adaptor● Iterator AdaptorのRange版● Rangeを横断しながら、値を変更したりスキッ プしたりして、元のRangeから別のRangeを返 す。● 遅延評価によって、実際にRangeの値が参照さ れるときに、その処理の間に入って働くため、 ● 元のRangeは変更しない。 ● 返されるRangeはいちいち元のRangeを全部コピー しているわけではない。 ● 計算量/空間量的にお得。
  • 19. Range Adaptor● Range Adaptorはパイプ演算子でつなげていく ことが出来る。 range_ | adaptor1 | adaptor2 | …● 効果が順次適用されていく
  • 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. Range-Based Function● STLのアルゴリズム(copy, sort, findなど)はイテ レータのbeginとendを引数に取る。● これはIterator-Based Functionと呼ばれる。● 使い勝手があんまりよくない。バグを埋めこん でしまう可能性も高い。● Iteratorのbeginとendをまとめたもの(=Range) を渡せるようにすればより使いやすい。
  • 22. Range-Based Function● ここら辺については、 ● Exceptional C++ ● プログラミングの魔導書vol.1 ”オーブンレンジクッキング” ● プログラミングの魔導少女 “RangeとPStade.Oven”● などなどに情報があります。
  • 23. というわけで、これからOvenとEggのソースに 潜っていきます
  • 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

×