#[derive(Debug)]
pub struct MapsOfMapArrayMap<MC: MapConstructor>
{
underlying: FileDescriptorArrayMap<MapFileDescriptor>,
inner_map_maximum_entries: MaximumEntries,
inner_map_access_permissions: MC::AccessPermissions,
inner_map_invariant_arguments: MC::InvariantArguments,
}
impl<MC: MapConstructor> MapsOfMapArrayMap<MC>
{
#[inline(always)]
pub fn capacity(&self) -> NonZeroU32
{
self.underlying.capacity()
}
#[inline(always)]
pub fn freeze(&self) -> Result<(), Errno>
{
self.underlying.freeze()
}
#[inline(always)]
pub fn indices(&self) -> RangeInclusive<u32>
{
self.underlying.indices()
}
#[inline(always)]
pub fn set(&self, index: u32, map_file_descriptors: &mut FileDescriptorsMap<MapFileDescriptor>, map_name: &MapName, parsed_bpf_type_format_map_data: Option<&ParsedBpfTypeFormatMapData>, variable_arguments: MC::VariableArguments) -> Result<MC::Map, ()>
{
let inner_map = MC::construct(map_file_descriptors, map_name, parsed_bpf_type_format_map_data, self.inner_map_maximum_entries, self.inner_map_access_permissions, self.inner_map_invariant_arguments, variable_arguments).map_err(|_| ())?;
self.underlying.set(index, inner_map.map_file_descriptor())?;
Ok(inner_map)
}
#[inline(always)]
pub fn delete(&self, index: u32) -> Result<bool, Errno>
{
self.underlying.delete(index)
}
pub fn new(maximum_entries: MaximumEntries, access_permissions: KernelOnlyAccessPermissions, inner_map_maximum_entries: MaximumEntries, inner_map_access_permissions: MC::AccessPermissions, inner_map_invariant_arguments: MC::InvariantArguments, map_file_descriptors: &mut FileDescriptorsMap<MapFileDescriptor>, map_name: &MapName, parsed_bpf_type_format_map_data: Option<&ParsedBpfTypeFormatMapData>, index: u32, map_at_index_variable_arguments: MC::VariableArguments) -> Result<(Self, MC::Map), ()>
{
debug_assert!(index < maximum_entries.to_u32());
let inner_map = MC::construct(map_file_descriptors, map_name, parsed_bpf_type_format_map_data, inner_map_maximum_entries, inner_map_access_permissions, inner_map_invariant_arguments, map_at_index_variable_arguments).map_err(|_| ())?;
let template_map_file_descriptor = inner_map.map_file_descriptor();
let this = Self
{
underlying: FileDescriptorArrayMap::new_map_of_maps(map_file_descriptors, map_name, parsed_bpf_type_format_map_data, maximum_entries, access_permissions, template_map_file_descriptor).map_err(|_| ())?,
inner_map_maximum_entries,
inner_map_access_permissions,
inner_map_invariant_arguments,
};
this.underlying.set(index, template_map_file_descriptor)?;
Ok((this, inner_map))
}
}