提升精神2:有没有办法知道什么是解析器进展百分比?

时间:2015-12-10 20:45:14

标签: c++ boost boost-spirit

我设法将pgn文件解析为几个游戏mainly thanks to this forum

但是,由于我必须处理的文件有这么多游戏,因此在我最近的计算机上进行此过程可能需要两分钟。这就是为什么我想使用这个解析器在GUI应用程序上设置进度条的动画。

我认为最简单的方法是问问"精神他已经处理了多少个角色,剩下多少个角色。 (或者剩余多少行并且已经处理过。)

有可能吗?如果是这样,我如何修改解析器文件以获得此比率?

1 个答案:

答案 0 :(得分:2)

您可以使用line_pos_iterator以及可能来自存储库的iter_pos原语。

  • (@ GuyGreer :)没有办法知道所涉及的回溯量(否则,首先不需要回溯)。所以,最好的办法是接受你得到的某种“平均吞吐量”,有时可能会有点突发或滞后。如果你的语法不平衡,这些变化不仅仅是噪音,你应该考虑首先修复语法/解析器的定义。

  • 为了解决不知道流长度的“问题”,除了不将其作为流之外,你无法修复它。

    我建议使用内存映射。您可以使用boost::iostreamsboost::interprocessmmap中的设施。

我估计我至少有3个答案展示了这个答案中提到的每种技术,所以我只是搜索这个网站。