.. _program_listing_file_src_sta_HSCutOnlyFlow.h: Program Listing for File HSCutOnlyFlow.h ======================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/sta/HSCutOnlyFlow.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include "HSPartitionFlow.h" namespace HSFullTiming { class HSTimingLocalData; // 基于已有 HSPartitionFlow + HSTimingLocalData 构建“只保留割边”的缩小版 // timing flow。输出仍复用 HSPartitionFlow 的数据结构,便于后续 TDM/Routing // 直接消费。 class HSCutOnlyFlow : public HSPartitionFlow { public: HSCutOnlyFlow() = default; explicit HSCutOnlyFlow(const std::vector &partInfo) : m_partInfo(partInfo) { } ~HSCutOnlyFlow() override = default; // 依据当前 partInfo 判断哪些 outer edge 是 cut edge,并构建 cut-only // flow。要求 srcFlow 已完成 buildNextObjInfo,且 partInfo 与 // srcFlow.getHyperNodeNum() 对齐。 int buildFrom(const HSPartitionFlow &srcFlow); // 兼容接口:从 localData 中提取 partInfo 后调用 buildFrom(srcFlow)。 int buildFrom(const HSPartitionFlow &srcFlow, const HSTimingLocalData *localData); void setPartInfo(const std::vector &partInfo) { m_partInfo = partInfo; } const std::vector &getPartInfo() const { return m_partInfo; } const std::vector &getNew2OldEdgeIds() const { return m_new2OldEdgeIds; } const std::vector &getOld2NewEdgeIds() const { return m_old2NewEdgeIds; } private: void clearCompactMaps(); void cloneClocksFrom(const HSPartitionFlow &srcFlow); void buildCutEdgeMaps(const HSPartitionFlow &srcFlow); void buildOuterEdgesFrom(const HSPartitionFlow &srcFlow); void buildCutNetsFrom(const HSPartitionFlow &srcFlow); void buildCompressedCutAdjacency( const HSPartitionFlow &srcFlow, const std::vector> &forwardNonCut2Cut); void buildCompressedClockAdjacency( const HSPartitionFlow &srcFlow, const std::vector> &forwardNonCut2Cut, const std::vector> &backwardNonCut2Cut); void rebuildNode2EdgeIds(); std::vector m_new2OldEdgeIds; std::vector m_old2NewEdgeIds; std::vector m_partInfo; }; } // namespace HSFullTiming