建议使用什么方法来访问来自bulkio输入流的上一个或下一个数据块中的数据?编辑:我正在使用c++。
例如,如果我想对输入数据流进行卷积,其中每个计算都取决于流中向前/向后的一些值,那么我将如何进入“下一个”数据块或“上一个”数据块在块边界执行卷积计算?还是将这些信息临时存储在组件内的某个位置,以便可以从一个块到下一个块使用?
再举一个简单的例子,如果我将一个8个八位位组值的重复 vector 发送到我的组件中,则我希望该组件在接收到1时就从0翻转到1,反之亦然(取决于前一个数据块的最后一个索引)计算下一个数据块的第一个索引)。
期望的:
在:[0,0,0,1,0,0,0] [0,0,0,1,0,0,0] [0,0,0,1,0,0,0]->
out:[1,1,1,0,0,0,0] [0,0,0,1,1,1,1] [1,1,1,0,0,0,0]
我已经能够实现:
在:[0,0,0,1,0,0,0] [0,0,0,1,0,0,0] [0,0,0,1,0,0,0]->
out:[1,1,1,0,0,0,0] [1,1,1,0,0,0,0] [1,1,1,0,0,0,0]
我曾想过将先前处理过的块中的相关信息存储在组件代码serviceFunction()内某个变量中,尽管我还没有找到一种方法来在不重新初始化值的情况下进行此操作(每个数据块都是一个新调用)到serviceFunction()?)。
另外,我还想做一个只读属性来保存我关心的值,但是我怀疑可能有一个我不知道的更好的方法。
谢谢,
-标记
最佳答案
如果在两次读取之间需要保留一些样本,则BulkIO输入流支持数据重叠。您同时提供了多个要读取的样本和多个要消耗的样本(必须小于或等于读取大小),并且下一次读取将从第一个未消耗的样本开始。有关更多详细信息,请参阅BulkIO Stream API上的REDHAWK手册部分(在2.0.8手册中为5.7.3)。您还可以通过简单地将最后一个数据块作为组件类的成员变量读取来维护历史记录。
您的简单示例建议使用状态机,而不是最后读取的内容。通常,如果在serviceFunction()的两次迭代之间要存储一些信息,则可以自由地将自己的成员变量添加到组件类(例如“MyComponent_i”)。无需声明属性即可添加成员。在修改组件的属性或端口时,仅打算重新生成基类(例如“MyComponent_base”),因此将保留对组件类所做的任何更改。
关于c++ - 跨数据块的连续流计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47039209/