// Generated by dzn code from #ast:source-file
##include <dzn/container.hh>

##include "#code:file-name .hh"

##include <algorithm>
##include <cstring>

int to_int(std::string s){return std::stoi (s);}
bool to_bool(std::string s){return s == "true";}
void to_void(std::string){}

void
connect_ports (dzn::container< #x:type-name , std::function<void()>>& c)
{
  #x:main-port-connect-in #x:main-port-connect-out }

std::map<std::string,std::function<void()> >
event_map (dzn::container< #x:type-name , std::function<void()>>& c)
{
  #x:main-provided-port-init
  #x:main-required-port-init

  return {{"illegal", []{std::clog << "illegal" << std::endl;}}
         ,{"error", []{std::clog << "sut.error -> sut.error" << std::endl; std::exit(0);}}
          #x:main-event-map-void
          #x:main-event-map-valued
          #x:main-event-map-flush };
}

int
main(int argc, char* argv[])
{
  bool flush = argv + argc != std::find_if(argv + 1, argv + argc, [](const char* s){return std::strcmp(s,"--flush") == 0;});
  if(argv + argc != std::find_if(argv + 1, argv + argc, [](const char* s){return std::strcmp(s,"--debug") == 0;})) dzn::debug.rdbuf(std::clog.rdbuf());
  dzn::container< #x:type-name , std::function<void()>> c(flush);

  connect_ports (c);
  c(event_map (c), { #x:main-required-port-name });
}

//version: #x:version
