//             (id,              bif_type,     bro_type,     c_type,              c_type_smart,                           accessor,                         accessor_smart,                   cast_smart,           constructor,                                                                    ctor_smart)
DEFINE_BIF_TYPE(TYPE_ADDR,       "addr",       "addr",       "zeek::AddrVal*",    "zeek::IntrusivePtr<zeek::AddrVal>",    "%s->AsAddrVal()",                "%s",                             "<zeek::AddrVal>",    "zeek::IntrusivePtr{zeek::AdoptRef{}, %s}",                                     "std::move(%s)")
DEFINE_BIF_TYPE(TYPE_ANY,        "any",        "any",        "zeek::Val*",        "zeek::IntrusivePtr<zeek::Val>",        "%s",                             "%s",                             "",                   "zeek::IntrusivePtr{zeek::AdoptRef{}, %s}",                                     "std::move(%s)")
DEFINE_BIF_TYPE(TYPE_BOOL,       "bool",       "bool",       "int",               "int",                                  "%s->AsBool()",                   "%s->AsBool()",                   "",                   "zeek::val_mgr->Bool(%s)",                                                      "zeek::val_mgr->Bool(%s)")
DEFINE_BIF_TYPE(TYPE_CONN_ID,    "conn_id",    "conn_id",    "zeek::Val*",        "zeek::IntrusivePtr<zeek::Val>",        "%s",                             "%s",                             "",                   "zeek::IntrusivePtr{zeek::AdoptRef{}, %s}",                                     "std::move(%s)")
DEFINE_BIF_TYPE(TYPE_CONNECTION, "connection", "connection", "Connection*",       "Connection*",                          "%s->AsRecordVal()->GetOrigin()", "%s->AsRecordVal()->GetOrigin()", "",                   "%s->ConnVal()",                                                                "%s->ConnVal()")
DEFINE_BIF_TYPE(TYPE_COUNT,      "count",      "count",      "bro_uint_t",        "bro_uint_t",                           "%s->AsCount()",                  "%s->AsCount()",                  "",                   "zeek::val_mgr->Count(%s)",                                                     "zeek::val_mgr->Count(%s)")
DEFINE_BIF_TYPE(TYPE_DOUBLE,     "double",     "double",     "double",            "double",                               "%s->AsDouble()",                 "%s->AsDouble()",                 "",                   "zeek::make_intrusive<zeek::DoubleVal>(%s)",                                    "zeek::make_intrusive<zeek::DoubleVal>(%s)")
DEFINE_BIF_TYPE(TYPE_FILE,       "file",       "file",       "BroFile*",          "zeek::IntrusivePtr<zeek::Val>",        "%s->AsFile()",                   "%s",                             "",                   "zeek::make_intrusive<zeek::Val>(zeek::IntrusivePtr{zeek::AdoptRef{}, %s})",    "std::move(%s)")
DEFINE_BIF_TYPE(TYPE_INT,        "int",        "int",        "bro_int_t",         "bro_int_t",                            "%s->AsInt()",                    "%s->AsInt()",                    "",                   "zeek::val_mgr->Int(%s)",                                                       "zeek::val_mgr->Int(%s)")
DEFINE_BIF_TYPE(TYPE_INTERVAL,   "interval",   "interval",   "double",            "double",                               "%s->AsInterval()",               "%s->AsInterval()",               "",                   "zeek::make_intrusive<zeek::IntervalVal>(%s, Seconds)",                         "zeek::make_intrusive<zeek::IntervalVal>(%s, Seconds)")
DEFINE_BIF_TYPE(TYPE_PATTERN,    "pattern",    "pattern",    "RE_Matcher*",       "zeek::IntrusivePtr<zeek::PatternVal>", "%s->AsPattern()",                "%s",                             "<zeek::PatternVal>", "zeek::make_intrusive<zeek::PatternVal>(%s)",                                   "std::move(%s)")
DEFINE_BIF_TYPE(TYPE_PORT,       "port",       "port",       "zeek::PortVal*",    "zeek::IntrusivePtr<zeek::PortVal>",    "%s->AsPortVal()",                "%s",                             "<zeek::PortVal>",    "zeek::IntrusivePtr{zeek::AdoptRef{}, %s}",                                     "std::move(%s)")
DEFINE_BIF_TYPE(TYPE_STRING,     "string",     "string",     "zeek::StringVal*",  "zeek::IntrusivePtr<zeek::StringVal>",  "%s->AsStringVal()",              "%s",                             "<zeek::StringVal>",  "zeek::IntrusivePtr{zeek::AdoptRef{}, %s}",                                     "std::move(%s)")
DEFINE_BIF_TYPE(TYPE_SUBNET,     "subnet",     "subnet",     "zeek::SubNetVal*",  "zeek::IntrusivePtr<zeek::SubNetVal>",  "%s->AsSubNetVal()",              "%s",                             "<zeek::SubNetVal>",  "zeek::IntrusivePtr{zeek::AdoptRef{}, %s}",                                     "std::move(%s)")
DEFINE_BIF_TYPE(TYPE_TIME,       "time",       "time",       "double",            "double",                               "%s->AsTime()",                   "%s->AsTime()",                   "",                   "zeek::make_intrusive<zeek::TimeVal>(%s)",                                      "zeek::make_intrusive<zeek::TimeVal>(%s)")
DEFINE_BIF_TYPE(TYPE_OTHER,      "",           "",           "zeek::Val*",        "zeek::IntrusivePtr<zeek::Val>",        "%s",                             "%s",                             "",                   "zeek::IntrusivePtr{zeek::AdoptRef{}, %s}",                                     "std::move(%s)")
