// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #pragma once #include #include #include class ImagePreprocessorBuffer { protected: std::vector buffer; public: explicit ImagePreprocessorBuffer(size_t npixels); virtual ~ImagePreprocessorBuffer() = default; // Standard CPU operation std::vector &getBuffer(); const std::vector &getBuffer() const; int32_t &operator[](size_t i); const int32_t &operator[](size_t i) const; size_t size() const; int32_t *data(); const int32_t *data() const; // GPU operations (overriden in ImagePreprocessorBufferGPU virtual int32_t *getGPUBuffer(); virtual const int32_t *getGPUBuffer() const; // Values of the pixels with the given flat indices. Not just operator[] in a loop: on the GPU the // preprocessed image can live in device memory only, and then this gathers them there. virtual void Gather(const std::vector &npixel, std::vector &values) const; };