NetZone* father();
xbt_dict_t children(); // Sub netzones
- xbt_dynar_t hosts(); // my content as a dynar
+ std::vector<Host*> hosts(); // my content as a vector of hosts
/** Get the properties assigned to a host */
std::unordered_map<std::string, std::string>* properties();
jobjectArray jtable;
jobject jhost;
jstring jname;
- msg_host_t host;
simgrid::s4u::NetZone* as = jnetzone_get_native(env, jas);
- xbt_dynar_t table = as->hosts();
- int count = xbt_dynar_length(table);
-
jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
-
+ std::vector<sg_host_t> table = as->hosts();
if (!cls)
return nullptr;
- jtable = env->NewObjectArray(static_cast<jsize>(count), cls, nullptr);
+ jtable = env->NewObjectArray(static_cast<jsize>(table.size()), cls, nullptr);
if (!jtable) {
jxbt_throw_jni(env, "Hosts table allocation failed");
return nullptr;
}
- for (int index = 0; index < count; index++) {
- host = xbt_dynar_get_as(table,index,msg_host_t);
-
+ int index = 0;
+ for (auto host : table) {
jhost = static_cast<jobject>(host->extension(JAVA_HOST_LEVEL));
if (!jhost) {
jname = env->NewStringUTF(host->cname());
}
env->SetObjectArrayElement(jtable, index, jhost);
+ index++;
}
- xbt_dynar_free(&table);
return jtable;
}
xbt_dynar_t MSG_environment_as_get_hosts(msg_netzone_t netzone)
{
- return netzone->hosts();
+ xbt_dynar_t res = xbt_dynar_new(sizeof(sg_host_t), nullptr);
+
+ for (auto host : netzone->hosts()) {
+ xbt_dynar_push(res, &host);
+ }
+
+ return res;
}
SG_END_DECL()
return father_;
}
-xbt_dynar_t NetZone::hosts()
+std::vector<s4u::Host*> NetZone::hosts()
{
- xbt_dynar_t res = xbt_dynar_new(sizeof(sg_host_t), nullptr);
+ std::vector<s4u::Host*> res;
for (auto card : vertices_) {
s4u::Host* host = simgrid::s4u::Host::by_name_or_null(card->name());
if (host != nullptr)
- xbt_dynar_push(res, &host);
+ res.push_back(host);
}
return res;
}