@@ -111,65 +111,44 @@ pub struct AQLGlobalStatistics {
111111fn calculate_inherited_coverage_edges (
112112 graph : & mut AnnotationGraph ,
113113 n : NodeID ,
114- all_cov_components : & [ AnnotationComponent ] ,
115- all_dom_components : & [ AnnotationComponent ] ,
114+ other_cov_gs : & [ Arc < dyn GraphStorage > ] ,
115+ all_text_coverage_components : & [ AnnotationComponent ] ,
116+ inherited_cov_component : & AnnotationComponent ,
116117) -> std:: result:: Result < FxHashSet < NodeID > , ComponentTypeError > {
117118 // Iterate over all all nodes that are somehow covered (by coverage or
118119 // dominance edges) starting from the given node.
119- let all_text_coverage_components: Vec < AnnotationComponent > =
120- [ all_cov_components, all_dom_components] . concat ( ) ;
121-
122- let all_text_coverage_gs: Vec < _ > = all_text_coverage_components
120+ let all_text_cov_components_gs: Vec < _ > = all_text_coverage_components
123121 . iter ( )
124122 . filter_map ( |c| graph. get_graphstorage_as_ref ( c) )
125123 . map ( |gs| gs. as_edgecontainer ( ) )
126124 . collect ( ) ;
127- let combined_gs = UnionEdgeContainer :: new ( all_text_coverage_gs) ;
128-
129- let mut covered_token = FxHashSet :: default ( ) ;
130125
131- let inherited_cov_component = AnnotationComponent :: new (
132- AnnotationComponentType :: Coverage ,
133- ANNIS_NS . into ( ) ,
134- "inherited-coverage" . into ( ) ,
135- ) ;
126+ let all_text_cov_components_combined = UnionEdgeContainer :: new ( all_text_cov_components_gs) ;
136127
128+ let mut covered_token = FxHashSet :: default ( ) ;
137129 {
138130 let tok_helper = TokenHelper :: new ( graph) ?;
139- for step in CycleSafeDFS :: new ( & combined_gs , n, 1 , usize:: MAX ) {
131+ for step in CycleSafeDFS :: new ( & all_text_cov_components_combined , n, 1 , usize:: MAX ) {
140132 let step = step?;
141133 if tok_helper. is_token ( step. node ) ? {
142134 covered_token. insert ( step. node ) ;
143135 }
144136 }
145137 } ;
146- let other_coverage_gs: Vec < Arc < dyn GraphStorage > > = graph
147- . get_all_components ( Some ( AnnotationComponentType :: Coverage ) , None )
148- . into_iter ( )
149- . filter ( |c| c != & inherited_cov_component)
150- . filter_map ( |c| graph. get_graphstorage ( & c) )
151- . filter ( |gs| {
152- if let Some ( stats) = gs. get_statistics ( ) {
153- stats. nodes > 0
154- } else {
155- true
156- }
157- } )
158- . collect ( ) ;
159138
160139 // Connect all non-token nodes to the covered token nodes if no such direct coverage already exists
161140 let mut direct_coverage_targets = FxHashSet :: default ( ) ;
162- for gs in other_coverage_gs . iter ( ) {
141+ for gs in other_cov_gs . iter ( ) {
163142 for target in gs. get_outgoing_edges ( n) {
164143 direct_coverage_targets. insert ( target?) ;
165144 }
166145 }
167- let gs_cov = graph. get_or_create_writable ( & inherited_cov_component) ?;
146+ let inherited_gs_cov = graph. get_or_create_writable ( & inherited_cov_component) ?;
168147
169148 for target in & covered_token {
170149 if n != * target {
171150 if !direct_coverage_targets. contains ( target) {
172- gs_cov . add_edge ( Edge {
151+ inherited_gs_cov . add_edge ( Edge {
173152 source : n,
174153 target : * target,
175154 } ) ?;
@@ -286,19 +265,36 @@ impl AQLUpdateGraphIndex {
286265 ) -> std:: result:: Result < ( ) , ComponentTypeError > {
287266 self . clear_left_right_token ( graph) ?;
288267
289- let all_cov_components =
290- graph. get_all_components ( Some ( AnnotationComponentType :: Coverage ) , None ) ;
268+ let inherited_cov_component = AnnotationComponent :: new (
269+ AnnotationComponentType :: Coverage ,
270+ ANNIS_NS . into ( ) ,
271+ "inherited-coverage" . into ( ) ,
272+ ) ;
273+ let all_cov_components: Vec < _ > = graph
274+ . get_all_components ( Some ( AnnotationComponentType :: Coverage ) , None )
275+ . into_iter ( )
276+ . filter ( |c| c != & inherited_cov_component)
277+ . collect ( ) ;
278+
279+ let all_cov_gs: Vec < _ > = all_cov_components
280+ . iter ( )
281+ . filter_map ( |c| graph. get_graphstorage ( c) )
282+ . collect ( ) ;
283+
291284 let all_dom_components =
292285 graph. get_all_components ( Some ( AnnotationComponentType :: Dominance ) , None ) ;
286+ let all_text_coverage_components: Vec < AnnotationComponent > =
287+ [ all_cov_components, all_dom_components] . concat ( ) ;
293288
294289 // go over each node and calculate the left-most and right-most token
295290 for invalid in self . invalid_nodes . iter ( ) ? {
296291 let ( n, _) = invalid?;
297292 let covered_token = calculate_inherited_coverage_edges (
298293 graph,
299294 n,
300- & all_cov_components,
301- & all_dom_components,
295+ & all_cov_gs,
296+ & all_text_coverage_components,
297+ & inherited_cov_component,
302298 ) ?;
303299 self . calculate_token_alignment (
304300 graph,
0 commit comments