#pragma once

#include <cstdint>

namespace fsdk {

	/**
	 * @brief DeviceClass specifies which device/instruction set
	 *  to use for cnn inference.
	 * */
	enum class DeviceClass : int32_t {
		CPU = 0,

		GPU = 1,

		CPU_ARM = 2,
		CPU_AVX2, // CPU with AVX2/SSE4.2 ISA support

		GPU_INT8, // GPU with INT8 inference. Only Pascal+
		CPU_ARM_INT8,		

		GPU_MOBILE, // GPU for mobiles

		NPU_ASCEND,

		Invalid = -1
	};

	/**
	 * @brief LaunchOptions struct configures inference options on 
	 * per-estimator/detector basis, giving user fine grained
	 * control over cpu/gpu utilisation.
	 * */
	struct LaunchOptions {
		DeviceClass deviceClass = DeviceClass::CPU;
		
		// Cpu options
		bool runConcurrently = true;

		//External device options (GPU/NPU etc.)
		//Use defaultGpuDevice from runtime configuration
		static constexpr int32_t defaultDeviceId = -1;
		int32_t deviceId = defaultDeviceId;
	};
}