#include "treeprop.h"



Ar_Vertex_list*  Cd_graph::compute_ar_sets(  )
{
  DEM_TRACE("Cd_graph","Ar_Vertex_list*  Cd_graph::compute_ar_sets()");
  Ar_Vertex_list*  return_val =  init_ar_list() ;

  this->compute_ar_sets_( return_val );
  return return_val;
}
//  Cd_graph  = <adjacencies > Adjacency_nlist 
//            [ <terminal_sets > Vertex_comma_list  ] .
void Cd_graph::compute_ar_sets_( Ar_Vertex_list* & return_val )
{
  DEM_TRACE("Cd_graph","void Cd_graph::compute_ar_sets_(Ar_Vertex_list* & return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 
      return_val->ar_compute(this); 
    

  // outgoing calls

  // suffix class wrappers

  // assignments for carrying out
}

//  Ar_Vertex  = <v > Vertex 
//            <ar > Vertex_comma_list 
//            <contained_in > Vertex .
void Ar_Vertex::ar_compute( Cd_graph*  cd )
{
  DEM_TRACE("Ar_Vertex","void Ar_Vertex::ar_compute(Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 
      if (ar == NULL) {
        ar = cd->ar_compute(v);
      } 
    

  // outgoing calls

  // suffix class wrappers

  // assignments for carrying out
}

//  Ar_Vertex_list  ~  { Ar_Vertex  }. .
void Ar_Vertex_list::ar_compute( Cd_graph*  cd )
{
  DEM_TRACE("Ar_Vertex_list","void Ar_Vertex_list::ar_compute(Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Ar_Vertex_list_iterator	next_Ar_Vertex(*this);
  Ar_Vertex*		each_Ar_Vertex;

  while ( each_Ar_Vertex = next_Ar_Vertex() )
  {
  // repetition edge prefix wrappers
    each_Ar_Vertex->ar_compute( cd  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

Ar_Vertex_list*  Cd_graph::init_ar_list(  )
{
  DEM_TRACE("Cd_graph","Ar_Vertex_list*  Cd_graph::init_ar_list()");
  Ar_Vertex_list*  return_val =  new Ar_Vertex_list ;

  this->init_ar_list_( return_val );
  return return_val;
}
//  Cd_graph  = <adjacencies > Adjacency_nlist 
//            [ <terminal_sets > Vertex_comma_list  ] .
void Cd_graph::init_ar_list_( Ar_Vertex_list* & return_val )
{
  DEM_TRACE("Cd_graph","void Cd_graph::init_ar_list_(Ar_Vertex_list* & return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_adjacencies()->init_ar_list_( return_val );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Adjacency  = <source > Vertex 
//             [ <parameters > Vertex_comma_list  ] 
//            <ns > Neighbors 
//            "." .
void Adjacency::init_ar_list_( Ar_Vertex_list* & return_val )
{
  DEM_TRACE("Adjacency","void Adjacency::init_ar_list_(Ar_Vertex_list* & return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls

  // suffix class wrappers
 Ar_Vertex* ar_v = new Ar_Vertex(source, NULL, NULL);
                 return_val->append(ar_v); 

  // assignments for carrying out
}

//  Adjacency_nlist  ~ Adjacency  { Adjacency  }. .
void Adjacency_nlist::init_ar_list_( Ar_Vertex_list* & return_val )
{
  DEM_TRACE("Adjacency_nlist","void Adjacency_nlist::init_ar_list_(Ar_Vertex_list* & return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Adjacency_list_iterator	next_Adjacency(*this);
  Adjacency*		each_Adjacency;

  while ( each_Adjacency = next_Adjacency() )
  {
  // repetition edge prefix wrappers
    each_Adjacency->init_ar_list_( return_val );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

Vertex_comma_list*  Cd_graph::ar_compute( Vertex*  v )
{
  DEM_TRACE("Cd_graph","Vertex_comma_list*  Cd_graph::ar_compute(Vertex*  v)");
  Vertex_comma_list*  return_val =  new Vertex_comma_list ;

  this->ar_compute_( return_val, v  );
  return return_val;
}
//  Cd_graph  = <adjacencies > Adjacency_nlist 
//            [ <terminal_sets > Vertex_comma_list  ] .
void Cd_graph::ar_compute_( Vertex_comma_list* & return_val, Vertex*  v )
{
  DEM_TRACE("Cd_graph","void Cd_graph::ar_compute_(Vertex_comma_list* & return_val,Vertex*  v)");
  // variables for carrying in and out
  Cd_graph*  cd =  this ;

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_adjacencies()->ar_compute_( return_val, v , cd  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Adjacency  = <source > Vertex 
//             [ <parameters > Vertex_comma_list  ] 
//            <ns > Neighbors 
//            "." .
void Adjacency::ar_compute_( Vertex_comma_list* & return_val, Vertex*  v, Cd_graph*  cd )
{
  DEM_TRACE("Adjacency","void Adjacency::ar_compute_(Vertex_comma_list* & return_val,Vertex*  v,Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls

  // suffix class wrappers
 if (v->g_equal(source)) {
                  return_val->concatenate(ar_vertices(cd)); 
                } 

  // assignments for carrying out
}

//  Adjacency_nlist  ~ Adjacency  { Adjacency  }. .
void Adjacency_nlist::ar_compute_( Vertex_comma_list* & return_val, Vertex*  v, Cd_graph*  cd )
{
  DEM_TRACE("Adjacency_nlist","void Adjacency_nlist::ar_compute_(Vertex_comma_list* & return_val,Vertex*  v,Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Adjacency_list_iterator	next_Adjacency(*this);
  Adjacency*		each_Adjacency;

  while ( each_Adjacency = next_Adjacency() )
  {
  // repetition edge prefix wrappers
    each_Adjacency->ar_compute_( return_val, v , cd  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

Vertex_comma_list*  Adjacency::ar_vertices( Cd_graph*  cd )
{
  DEM_TRACE("Adjacency","Vertex_comma_list*  Adjacency::ar_vertices(Cd_graph*  cd)");
  Vertex_comma_list*  return_val =  new Vertex_comma_list ;

  this->ar_vertices_( return_val, cd  );
  return return_val;
}
//  Adjacency  = <source > Vertex 
//             [ <parameters > Vertex_comma_list  ] 
//            <ns > Neighbors 
//            "." .
void Adjacency::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd )
{
  DEM_TRACE("Adjacency","void Adjacency::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd)");
  // variables for carrying in and out
  Vertex*  src =  source ;

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_ns()->ar_vertices_( return_val, cd , src  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Neighbors  : Neighbors_wc   |
//            Repetit_n 
//           *common* .
void Neighbors::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd, Vertex*  src )
{
  DEM_TRACE("Neighbors","void Neighbors::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd,Vertex*  src)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Neighbors",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  Neighbors_wc  : Construct_ns   |
//               Alternat_ns 
//           *common* .
void Neighbors_wc::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd, Vertex*  src )
{
  DEM_TRACE("Neighbors_wc","void Neighbors_wc::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd,Vertex*  src)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Neighbors_wc",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  Construct_ns  = "=" 
//               <construct_ns > Any_vertex_list .
void Construct_ns::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd, Vertex*  src )
{
  DEM_TRACE("Construct_ns","void Construct_ns::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd,Vertex*  src)");
  // variables for carrying in and out

  // assignments for carrying in



  // prefix class wrappers

  // outgoing calls

  // suffix class wrappers
 return_val->set_union(src); 

  // assignments for carrying out


}

void Alternat_ns::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd, Vertex*  src )
{
  DEM_TRACE("Alternat_ns","void Alternat_ns::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd,Vertex*  src)");
  // variable definitions for carrying in and out

    this->ar_vertices_( return_val, cd  );

}

//  Alternat_ns  = ":" 
//              <alternat_ns > Term_bar_list 
//               [ <common > Common  ] 
//              <construct_ns > Any_vertex_list .
void Alternat_ns::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd )
{
  DEM_TRACE("Alternat_ns","void Alternat_ns::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in



  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_alternat_ns()->ar_vertices_( return_val, cd  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out


}

//  Vertex  = <vertex_name > DemIdent .
void Vertex::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd )
{
  DEM_TRACE("Vertex","void Vertex::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls

  // suffix class wrappers
 return_val->set_union(cd->ar_compute(this)); 

  // assignments for carrying out
}

//  Term  : Normal   |
//       CppTerm 
//           *common* .
void Term::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd )
{
  DEM_TRACE("Term","void Term::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Term",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  CppTerm  = "$" 
//          <vertex > Vertex 
//          <moduleRef > TermRef 
//           [ <actual_parameters > Term_comma_list  ] .
void CppTerm::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd )
{
  DEM_TRACE("CppTerm","void CppTerm::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in


  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_vertex()->ar_vertices_( return_val, cd  );
  // construction edge suffix wrappers
  if ( this->get_actual_parameters() != NULL )
  {
  // construction edge prefix wrappers
    this->get_actual_parameters()->ar_vertices_( return_val, cd  );
  // construction edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out

}

//  Normal  = <vertex > Vertex 
//         <moduleRef > TermRef 
//          [ <actual_parameters > Term_comma_list  ] .
void Normal::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd )
{
  DEM_TRACE("Normal","void Normal::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in


  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_vertex()->ar_vertices_( return_val, cd  );
  // construction edge suffix wrappers
  if ( this->get_actual_parameters() != NULL )
  {
  // construction edge prefix wrappers
    this->get_actual_parameters()->ar_vertices_( return_val, cd  );
  // construction edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out

}

//  Term_bar_list  ~ Term  { Term  }. .
void Term_bar_list::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd )
{
  DEM_TRACE("Term_bar_list","void Term_bar_list::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Term_list_iterator	next_Term(*this);
  Term*		each_Term;

  while ( each_Term = next_Term() )
  {
  // repetition edge prefix wrappers
    each_Term->ar_vertices_( return_val, cd  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

//  Term_comma_list  ~ Term  { Term  }. .
void Term_comma_list::ar_vertices_( Vertex_comma_list* & return_val, Cd_graph*  cd )
{
  DEM_TRACE("Term_comma_list","void Term_comma_list::ar_vertices_(Vertex_comma_list* & return_val,Cd_graph*  cd)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Term_list_iterator	next_Term(*this);
  Term*		each_Term;

  while ( each_Term = next_Term() )
  {
  // repetition edge prefix wrappers
    each_Term->ar_vertices_( return_val, cd  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

