:github_url: https://github.com/svenevs/exhale-companion .. _program_listing_file_ckpttncpp_HierNetlist.hpp: Program Listing for File HierNetlist.hpp ======================================== |exhale_lsh| :ref:`Return to documentation for file ` (``ckpttncpp/HierNetlist.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once // import networkx as nx // #include // #include // #include // #include // #include // #include // #include #include "netlist.hpp" #include "array_like.hpp" // using node_t = int; // struct PartInfo // { // std::vector part; // py::set extern_nets; // }; template class HierNetlist : public Netlist { public: using nodeview_t = typename graph_t::nodeview_t; using node_t = typename graph_t::node_t; using index_t = typename nodeview_t::key_type; /* For multi-level algorithms */ const Netlist* parent; std::vector node_up_map; std::vector node_down_map; py::dict cluster_down_map; shift_array> net_weight{}; HierNetlist(graph_t G, const nodeview_t& modules, const nodeview_t& nets); // HierNetlist(graph_t G, uint32_t numModules, uint32_t numNets); void projection_down(gsl::span part, gsl::span part_down) const; void projection_up(gsl::span part, gsl::span part_up) const; auto get_net_weight(const node_t& net) const -> int { return this->net_weight.empty() ? 1 : this->net_weight[net]; } }; template HierNetlist::HierNetlist( graph_t G, const nodeview_t& modules, const nodeview_t& nets) : Netlist {std::move(G), modules, nets} { } // template // HierNetlist::HierNetlist(graph_t G, uint32_t numModules, uint32_t numNets) // : Netlist {std::move(G), py::range(numModules), // py::range(numModules, numModules + numNets)} // { // } using SimpleHierNetlist = HierNetlist;