/* 
 Prepacking: Group together technology-mapped netlist blocks before packing.  This gives hints to the packer on what groups of blocks to keep together during packing.
 Primary use 1) "Forced" packs (eg LUT+FF pair)
 2) Carry-chains
 */

#ifndef PREPACK_H
#define PREPACK_H
#include <unordered_map>
#include "atom_netlist_fwd.h"
#include "arch_types.h"
#include "vpr_types.h"
#include "pack_molecules.h"

PackMolecules prepack(const DeviceContext& device_ctx, const AtomContext& atom_ctx);

t_pack_patterns *alloc_and_load_pack_patterns(int *num_packing_patterns);
void free_list_of_pack_patterns(t_pack_patterns *list_of_pack_patterns, const int num_packing_patterns);

t_pack_molecule *alloc_and_load_pack_molecules(
		t_pack_patterns *list_of_pack_patterns,
        std::multimap<AtomBlockId,t_pack_molecule*>& atom_molecules,
        std::unordered_map<AtomBlockId,t_pb_graph_node*>& expected_lowest_cost_pb_gnode,
		const int num_packing_patterns);

#endif
