#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum FileDescriptorOrigin<'a, FD: 'a + FileDescriptor>
{
Index(RegisteredFileDescriptorIndex),
Absolute(&'a FD),
}
impl<'a, FD: 'a + FileDescriptor> FileDescriptorOrigin<'a, FD>
{
#[inline(always)]
fn into_and_adjust_flags(&self, options: SubmissionQueueEntryOptions, using_kernel_submission_queue_poll: bool) -> (FileDescriptorKind, SubmissionQueueEntryFlags)
{
use self::FileDescriptorOrigin::*;
let flags = options.into_flags();
match self
{
&Index(index) => (FileDescriptorKind::Index(index), flags | SubmissionQueueEntryFlags::FixedFile),
&Absolute(file_descriptor) =>
{
Self::guard(using_kernel_submission_queue_poll);
(FileDescriptorKind::from(file_descriptor), flags)
}
}
}
#[inline(always)]
fn into_and_adjust_splice_flags(&self, flags: SpliceFlags, using_kernel_submission_queue_poll: bool) -> (FileDescriptorKind, u32)
{
use self::FileDescriptorOrigin::*;
let flags = flags.bits();
match self
{
&Index(index) => (FileDescriptorKind::Index(index), flags | SPLICE_F_FD_IN_FIXED),
&Absolute(file_descriptor) =>
{
Self::guard(using_kernel_submission_queue_poll);
(FileDescriptorKind::from(file_descriptor), flags)
}
}
}
#[inline(always)]
fn guard(using_kernel_submission_queue_poll: bool)
{
debug_assert!(!using_kernel_submission_queue_poll, "Can not use absolute file descriptor when using a kernel thread for submission queue polling");
}
}