text: /*
   * Find placement for group of atom blocks in complex block
   * Author: Jason Luu
   */
  
  #ifndef CLUSTER_PLACEMENT_H
  #define CLUSTER_PLACEMENT_H
  #include "arch_types.h"
  
  t_cluster_placement_stats* alloc_and_load_cluster_placement_stats();
  bool get_next_primitive_list(
      t_cluster_placement_stats* cluster_placement_stats,
      const t_pack_molecule* molecule,
      t_pb_graph_node** primitives_list);
  void commit_primitive(t_cluster_placement_stats* cluster_placement_stats,
                        const t_pb_graph_node* primitive);
  void set_mode_cluster_placement_stats(const t_pb_graph_node* complex_block,
                                        int mode);
  void reset_cluster_placement_stats(
      t_cluster_placement_stats* cluster_placement_stats);
  void free_cluster_placement_stats(
      t_cluster_placement_stats* cluster_placement_stats);
  
  int get_array_size_of_molecule(const t_pack_molecule* molecule);
  bool exists_free_primitive_for_atom_block(
      t_cluster_placement_stats* cluster_placement_stats,
      const AtomBlockId blk_id);
  
  void reset_tried_but_unused_cluster_placements(
      t_cluster_placement_stats* cluster_placement_stats);
  
  
  void flush_intermediate_queues(t_cluster_placement_stats* cluster_placement_stats);
  
  #endif
  