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[][] );[]