+broadcaster_t broadcaster_init(xbt_dynar_t host_list)
+{
+ int status;
+ broadcaster_t bc = xbt_new(s_broadcaster_t, 1);
+
+ bc->piece_count = PIECE_COUNT;
+ bc->current_piece = 0;
+ bc->host_list = host_list;
+ bc->it = xbt_dynar_iterator_new(bc->host_list, forward_indices_list);
+ bc->max_pending_sends = MAX_PENDING_SENDS;
+ bc->pending_sends = xbt_dynar_new(sizeof(msg_comm_t), NULL);
+
+ status = broadcaster_build_chain(bc);
+ xbt_assert(status == MSG_OK, "Chain initialization failed");
+
+ return bc;
+}
+
+static void broadcaster_destroy(broadcaster_t bc)
+{
+ /* Destroy iterator and hostlist */
+ xbt_dynar_iterator_delete(bc->it);
+ xbt_dynar_free(&bc->pending_sends);
+ xbt_dynar_free(&bc->host_list);
+}