protected final boolean has_cycle_recu(Set<BrdItem> p_visited_items,BrdItem p_search_item,BrdItem p_come_from_item,boolean p_ignore_areas){
  if (p_ignore_areas && (this instanceof BrdAreaConduction))   return false;
  Collection<BrdItem> contact_list=get_normal_contacts();
  if (contact_list == null)   return false;
  for (  BrdItem curr_contact : contact_list) {
    if (curr_contact == p_come_from_item)     continue;
    if (curr_contact == p_search_item)     return true;
    if (!p_visited_items.add(curr_contact))     continue;
    if (curr_contact.has_cycle_recu(p_visited_items,p_search_item,this,p_ignore_areas))     return true;
  }
  return false;
}

protected final boolean has_cycle_recu ( Set < BrdItem > p_visited_items , BrdItem p_search_item , BrdItem p_come_from_item , boolean p_ignore_areas ) { if ( p_ignore_areas && ( this instanceof BrdAreaConduction ) ) return false ; Collection < BrdItem > contact_list = get_normal_contacts ( ) ; if ( contact_list == null ) return false ; for ( BrdItem curr_contact : contact_list ) { if ( curr_contact == p_come_from_item ) continue ; if ( curr_contact == p_search_item ) return true ; if ( ! p_visited_items . add ( curr_contact ) ) continue ; if ( curr_contact . has_cycle_recu ( p_visited_items , p_search_item , this , p_ignore_areas ) ) return true ; } return false ; }
recursive part of trace . is_cycle . if p_ignore_areas is true , cycles where conduction areas are involved are ignored .
