rangeをメモ化する
- 何重にもadaptorを重ねたrangeに複雑なアルゴリズムを適用するとすごく遅くなる
- そこで、memoize_range・・・ソースコード
- 実装に使ったspirit::multi_pass iteratorが謎だらけなので怪しい
- 要件がちょっと特殊なようでそのままでは使えなかった
[]using[] []namespace[] []pstade[][];[]
[]using[] []namespace[] []oven[][];[]
[]namespace[] []bll[][] = [][]boost[][]::[][]lambda[][];[]
[]std[][]::[][]string[] []src[][]([][]"axaxaxbxbxbx"[][]);[]
[]std[][]::[][]string[] []s1[][]; [][]// snapshot[]
[]std[][]::[][]string[] []s2[][];[]
[]std[][]::[][]string[] []answer[][]([][]"bbb"[][]);[][]BOOST_CHECK[][](([]
[]oven[][]::[][]equals[][]([][]answer[][],[]
[]src[][] |[]
[]filtered[][]([][]bll[][]::[][]_1[][] != [][]'x'[][]) |[]
[]memoized[][] |[]
[]copied[][]([][]std[][]::[][]back_inserter[][]([][]s1[][])) |[]
[]filtered[][]([][]bll[][]::[][]_1[][] != [][]'a'[][]) |[]
[]memoized[][] |[]
[]copied[][]([][]std[][]::[][]back_inserter[][]([][]s2[][]))[]
[] )[]
[]));[][]BOOST_CHECK[][]( [][]s1[][] == [][]"aaabbb"[][] );[]
[]BOOST_CHECK[][]( [][]s2[][] == [][]answer[][] );[]