Merge pull request #548 from matthiasbeyer/libimagstore/storeid-hook-exec-in-mutable-hook-exec

Execute StoreIdAccess accessors in MutableHookDataAccessor impl for A…
This commit is contained in:
Matthias Beyer 2016-07-16 11:23:52 +02:00 committed by GitHub
commit 6c181d32b6

View file

@ -75,23 +75,15 @@ impl MutableHookDataAccessor for Aspect {
let accessors : Vec<HDA> = self.hooks.iter().map(|h| h.accessor()).collect(); let accessors : Vec<HDA> = self.hooks.iter().map(|h| h.accessor()).collect();
fn is_file_accessor(a: &HDA) -> bool {
is_match!(*a, HDA::MutableAccess(_) | HDA::NonMutableAccess(_))
}
if !accessors.iter().all(|a| is_file_accessor(a)) {
return Err(HE::new(HEK::AccessTypeViolation, None));
}
// TODO: Naiive implementation. // TODO: Naiive implementation.
// More sophisticated version would check whether there are _chunks_ of // More sophisticated version would check whether there are _chunks_ of
// NonMutableAccess accessors and execute these chunks in parallel. We do not have // NonMutableAccess accessors and execute these chunks in parallel. We do not have
// performance concerns yet, so this is okay. // performance concerns yet, so this is okay.
accessors.iter().fold_defresult(|accessor| { accessors.iter().fold_defresult(|accessor| {
let res = match accessor { let res = match accessor {
&HDA::StoreIdAccess(ref accessor) => accessor.access(fle.get_location()),
&HDA::MutableAccess(ref accessor) => accessor.access_mut(fle), &HDA::MutableAccess(ref accessor) => accessor.access_mut(fle),
&HDA::NonMutableAccess(ref accessor) => accessor.access(fle), &HDA::NonMutableAccess(ref accessor) => accessor.access(fle),
_ => unreachable!(),
}; };
trace_hook_errors(res) trace_hook_errors(res)
}) })