///|
pub fn ResourceCache::insert_resource_descriptor(
self : ResourceCache[RendererResourceKey, RendererResourceDescriptor],
descriptor : RendererResourceDescriptor,
) -> Bool {
if descriptor.is_cacheable() {
self.insert(descriptor.key, descriptor, byte_size=descriptor.byte_size)
} else {
false
}
}
///|
pub fn ResourceCache::insert_resource_plan(
self : ResourceCache[RendererResourceKey, RendererResourceDescriptor],
plan : RendererResourcePlan,
) -> Int {
let mut inserted = 0
for descriptor in plan.descriptors {
if self.insert_resource_descriptor(descriptor) {
inserted += 1
}
}
inserted
}
///|
pub fn ResourceCache::contains_resource_descriptor(
self : ResourceCache[RendererResourceKey, RendererResourceDescriptor],
descriptor : RendererResourceDescriptor,
) -> Bool {
self.peek(descriptor.key) == Some(descriptor)
}
///|
pub fn ResourceCache::contains_resource_plan(
self : ResourceCache[RendererResourceKey, RendererResourceDescriptor],
plan : RendererResourcePlan,
) -> Bool {
let mut covered = true
for descriptor in plan.descriptors {
if descriptor.is_cacheable() &&
!self.contains_resource_descriptor(descriptor) {
covered = false
}
}
covered
}
///|
pub fn ResourceCache::cached_cacheable_resource_plan(
self : ResourceCache[RendererResourceKey, RendererResourceDescriptor],
plan : RendererResourcePlan,
) -> RendererResourcePlan {
let descriptors : Array[RendererResourceDescriptor] = Array::new()
for descriptor in plan.descriptors {
if descriptor.is_cacheable() &&
self.contains_resource_descriptor(descriptor) {
descriptors.push(descriptor)
}
}
RendererResourcePlan::new(descriptors)
}
///|
pub fn ResourceCache::missing_cacheable_resource_plan(
self : ResourceCache[RendererResourceKey, RendererResourceDescriptor],
plan : RendererResourcePlan,
) -> RendererResourcePlan {
let descriptors : Array[RendererResourceDescriptor] = Array::new()
for descriptor in plan.descriptors {
if descriptor.is_cacheable() &&
!self.contains_resource_descriptor(descriptor) {
descriptors.push(descriptor)
}
}
RendererResourcePlan::new(descriptors)
}