MCPcopy Create free account
hub / github.com/ciphermodelabs/ciphercore / inline_iterate

Function inline_iterate

ciphercore-base/src/inline/inline_ops.rs:366–452  ·  view source on GitHub ↗
(
    graph: Graph,
    output_graph: Graph,
    dependencies: Vec<Node>,
    mode: InlineMode,
    inlining_context: &mut InliningContext,
)

Source from the content-addressed store, hash-verified

364}
365
366fn inline_iterate(
367 graph: Graph,
368 output_graph: Graph,
369 dependencies: Vec<Node>,
370 mode: InlineMode,
371 inlining_context: &mut InliningContext,
372) -> Result<Node> {
373 let inputs_node = dependencies[1].clone();
374 let initial_state = dependencies[0].clone();
375 let graph_output_type = graph.get_output_node()?.get_type()?;
376 let output_element_type = match graph_output_type {
377 Type::Tuple(tuple_types) => (*tuple_types[1]).clone(),
378 _ => {
379 panic!("Inconsistency with type checker for Iterate output.");
380 }
381 };
382
383 let mut inline_state = InlineStateImpl {
384 output_graph: output_graph.clone(),
385 inlining_context,
386 };
387
388 let mut simple_inliner = || -> Result<(Node, Vec<Node>)> {
389 inline_iterate_simple(
390 graph.clone(),
391 initial_state.clone(),
392 inputs_node.clone(),
393 &mut inline_state,
394 )
395 };
396
397 let (final_state, outputs) = match mode {
398 InlineMode::Simple => simple_inliner(),
399 InlineMode::DepthOptimized(optimization_level) => {
400 if is_empty_tuple(initial_state.get_type()?) {
401 inline_iterate_empty_state(
402 graph.clone(),
403 initial_state.clone(),
404 inputs_node.clone(),
405 &mut inline_state,
406 )
407 } else if graph
408 .get_annotations()?
409 .contains(&GraphAnnotation::AssociativeOperation)
410 {
411 inline_iterate_associative(
412 graph.clone(),
413 initial_state.clone(),
414 inputs_node.clone(),
415 optimization_level,
416 &mut inline_state,
417 )
418 } else if graph
419 .get_annotations()?
420 .contains(&GraphAnnotation::OneBitState)
421 {
422 inline_iterate_small_state(
423 true,

Callers 1

recursively_inline_graphFunction · 0.85

Calls 11

inline_iterate_simpleFunction · 0.85
is_empty_tupleFunction · 0.85
cloneMethod · 0.80
get_annotationsMethod · 0.80
get_typeMethod · 0.45
get_output_nodeMethod · 0.45
create_vectorMethod · 0.45
create_tupleMethod · 0.45

Tested by

no test coverage detected