byte-engine-ghi 0.1.0

Graphics hardware interface layer used by Byte-Engine.
use crate::{HandleLike, Next, PrivateHandle, PrivateHandles, Synchronizer};

#[derive(Clone, Copy, PartialEq, Eq, Hash)]
pub(crate) struct SynchronizerHandle(pub(crate) u64);

impl From<SynchronizerHandle> for PrivateHandles {
	fn from(val: SynchronizerHandle) -> Self {
		PrivateHandles::Synchronizer(val)
	}
}

impl PrivateHandle for SynchronizerHandle {
	fn new(i: u64) -> Self {
		Self(i)
	}

	fn index(&self) -> u64 {
		self.0
	}
}

impl HandleLike for SynchronizerHandle {
	type Item = Synchronizer;

	fn build(value: u64) -> Self {
		SynchronizerHandle(value)
	}

	fn access<'a>(&self, collection: &'a [Self::Item]) -> &'a Synchronizer {
		&collection[self.0 as usize]
	}
}

impl Next for Synchronizer {
	type Handle = SynchronizerHandle;

	fn next(&self) -> Option<SynchronizerHandle> {
		self.next
	}
}