Каков рекомендуемый метод (ы) для доступа к данным из предыдущего или будущего блока данных из входного потока объемных данных? Изменить: я использую с ++.
Например, если бы я хотел выполнить свертку в потоке входящих данных, где каждое вычисление зависит от некоторого числа значений вперед / назад в потоке, как бы я попал в «следующий» блок данных или «предыдущий» блок данных выполнить сверточные расчеты на границах блоков? Или временно сохранить эту информацию где-то внутри компонента, чтобы ее можно было использовать от одного блока к другому?
Или более простой пример: если я отправляю повторяющийся вектор с 8-октетными значениями в свой компонент, я хочу, чтобы компонент просто переключался с 0 на 1 или наоборот при получении 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 поддерживают перекрытие данных. Вы предоставляете как количество выборок для чтения, так и количество выборок для потребления (которое обязательно меньше или равно размеру чтения), и следующее чтение начнется с первой выборки, которая не была использована. Обратитесь к разделу руководства REDHAWK в BulkIO Stream API (5.7.3 в руководстве 2.0.8) для получения дополнительной информации. Вы также можете поддерживать историю, просто сохраняя последний прочитанный блок данных как переменную-член класса вашего компонента.
Ваш простой пример предлагает конечный автомат, а не содержимое последнего чтения. В общем, если есть информация, которую вы хотите сохранить между итерациями вашего serviceFunction (), вы можете свободно добавлять свои собственные переменные-члены в класс компонента (например, «MyComponent_i»). Нет необходимости объявлять свойство для добавления членов. Только базовый класс (например, «MyComponent_base») предназначен для регенерации при изменении свойств или портов компонента, поэтому любые изменения, внесенные в класс компонента, сохраняются.
Других решений пока нет …