#ifndef _LIVOX_GEN1_MESH_STIMULUS_BUFFER_H
#define _LIVOX_GEN1_MESH_STIMULUS_BUFFER_H

#include <memory>
#include <user/stimulusBuffer.h>
#include <user/stagingBuffer.h>

namespace smo {
namespace stim_buff {

// Forward declaration
class StimulusProducer;

/**
 * MeshStimulusBuffer is a specialized StimulusBuffer for mesh data.
 */
class MeshStimulusBuffer
:	public StimulusBuffer
{
public:
	explicit MeshStimulusBuffer(
		StimulusProducer& parent,
		const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec,
		int histbuffMs,
		const StagingBuffer::IOEngineConstraints& inputEngineConstraints,
		const StagingBuffer::IOEngineConstraints& outputEngineConstraints,
		const SmoCallbacks& callbacks,
		cl_mem_flags flags)
	:	StimulusBuffer(
			parent, deviceAttachmentSpec, histbuffMs,
			inputEngineConstraints, outputEngineConstraints,
			callbacks, flags)
	{}

	~MeshStimulusBuffer() = default;

	// Non-copyable, movable
	MeshStimulusBuffer(const MeshStimulusBuffer&) = delete;
	MeshStimulusBuffer& operator=(const MeshStimulusBuffer&) = delete;
	MeshStimulusBuffer(MeshStimulusBuffer&&) = default;
	MeshStimulusBuffer& operator=(MeshStimulusBuffer&&) = default;
};

} // namespace stim_buff
} // namespace smo

#endif // _LIVOX_GEN1_MESH_STIMULUS_BUFFER_H

