ACL_IMPL_FILE_PRAGMA_PUSH

namespace acl
{
	//////////////////////////////////////////////////////////////////////////
	// Type tracks for tracks.
	// Each trait contains:
	//    - The category of the track
	//    - The type of each sample in the track
	//    - The type of the track description
	//////////////////////////////////////////////////////////////////////////
	template<track_type8 track_type>
	struct track_traits {};

	//////////////////////////////////////////////////////////////////////////
	// Specializations for each track type.

	template<>
	struct track_traits<track_type8::float1f>
	{
		static constexpr track_category8 category = track_category8::scalarf;

		using sample_type = float;
		using desc_type = track_desc_scalarf;
	};

	template<>
	struct track_traits<track_type8::float2f>
	{
		static constexpr track_category8 category = track_category8::scalarf;

		using sample_type = rtm::float2f;
		using desc_type = track_desc_scalarf;
	};

	template<>
	struct track_traits<track_type8::float3f>
	{
		static constexpr track_category8 category = track_category8::scalarf;

		using sample_type = rtm::float3f;
		using desc_type = track_desc_scalarf;
	};

	template<>
	struct track_traits<track_type8::float4f>
	{
		static constexpr track_category8 category = track_category8::scalarf;

		using sample_type = rtm::float4f;
		using desc_type = track_desc_scalarf;
	};

	template<>
	struct track_traits<track_type8::vector4f>
	{
		static constexpr track_category8 category = track_category8::scalarf;

		using sample_type = rtm::vector4f;
		using desc_type = track_desc_scalarf;
	};
}

ACL_IMPL_FILE_PRAGMA_POP
