svf-tools 1.0.587 → 1.0.589
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/AbstractPointsToDS_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenPWC_8h_source.html +6 -6
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +25 -25
- package/SVF-doxygen/html/html/Andersen_8h_source.html +17 -17
- package/SVF-doxygen/html/html/Annotator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/BasicTypes_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +2 -2
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +4 -4
- package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +11 -11
- package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +7 -7
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +6 -6
- package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CFLGraph_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CFLStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +27 -27
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +5 -5
- package/SVF-doxygen/html/html/CHG_8cpp.html +3 -3
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/CHG_8h_source.html +8 -8
- package/SVF-doxygen/html/html/CPPUtil_8cpp.html +2 -2
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +26 -26
- package/SVF-doxygen/html/html/CPPUtil_8h_source.html +4 -4
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/CSC_8h_source.html +4 -4
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/Casting_8h.html +1 -0
- package/SVF-doxygen/html/html/Casting_8h_source.html +42 -42
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +8 -8
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +21 -21
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +38 -38
- package/SVF-doxygen/html/html/ConsG_8h_source.html +28 -28
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +25 -23
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +11 -11
- package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CoreBitVector_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +36 -36
- package/SVF-doxygen/html/html/DCHG_8h_source.html +15 -15
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +4 -4
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +4 -4
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/DDAStat_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +16 -16
- package/SVF-doxygen/html/html/DPItem_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +11 -11
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExeState_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ExeState_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ExtAPI_8cpp.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +13 -13
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +19 -19
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +8 -8
- package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +61 -61
- package/SVF-doxygen/html/html/GrammarBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +37 -34
- package/SVF-doxygen/html/html/ICFG_8h_source.html +30 -30
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +28 -28
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +10 -10
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +28 -28
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +7 -7
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +26 -26
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +18 -18
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +7 -7
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +11 -11
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MHP_8cpp.html +3 -3
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +35 -36
- package/SVF-doxygen/html/html/MHP_8h_source.html +15 -15
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +8 -8
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +28 -28
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +11 -11
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/MTAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/MTA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +41 -41
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +14 -14
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +8 -8
- package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +7 -7
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/PCG_8h_source.html +7 -7
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +9 -9
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/PTAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +34 -34
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +31 -31
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +63 -63
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +83 -84
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/PointsTo_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +10 -10
- package/SVF-doxygen/html/html/SCC_8h_source.html +6 -6
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +5 -1
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +85 -85
- package/SVF-doxygen/html/html/SVFBasicTypes_8h.html +23 -27
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +73 -74
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +14 -14
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFGStat_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +25 -25
- package/SVF-doxygen/html/html/SVFG_8h_source.html +12 -12
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +58 -58
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +75 -75
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +34 -34
- package/SVF-doxygen/html/html/SVFLoop_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +13 -13
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +10 -10
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +23 -23
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SaberAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +34 -34
- package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +47 -47
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +59 -59
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SymState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +40 -40
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +6 -6
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +13 -13
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +22 -23
- package/SVF-doxygen/html/html/TCT_8h_source.html +21 -21
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +8 -8
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +6 -6
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +6 -6
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -14
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +97 -97
- package/SVF-doxygen/html/html/VFGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +8 -8
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +72 -69
- package/SVF-doxygen/html/html/VFG_8h_source.html +57 -57
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +24 -24
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +7 -7
- package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +5 -5
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +6 -6
- package/SVF-doxygen/html/html/WPASolver_8h_source.html +3 -3
- package/SVF-doxygen/html/html/WPAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/WorkList_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Z3Expr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Z3Expr_8h_source.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +249 -250
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +64 -66
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +216 -217
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +15 -17
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +259 -260
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +16 -18
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +271 -272
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +12 -14
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +257 -258
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +6 -8
- package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +164 -165
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +67 -69
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +191 -192
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +20 -22
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase-members.html +185 -186
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +9 -11
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CFLStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF-members.html +189 -190
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +2 -4
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +57 -57
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +153 -154
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +19 -21
- package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +80 -80
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +120 -120
- package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +255 -256
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThreadProc.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +88 -88
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +283 -284
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +3 -5
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +249 -250
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +28 -30
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +274 -275
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +88 -90
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +41 -42
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +44 -44
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase_1_1SymbolHash.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +71 -67
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +60 -60
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +67 -67
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +70 -71
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +108 -108
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +55 -55
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +40 -40
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +120 -121
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +258 -276
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection_1_1GNodeSCCInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +97 -97
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +79 -79
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +255 -255
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +132 -132
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +103 -103
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html +45 -45
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +228 -229
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +5 -7
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +71 -71
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +29 -29
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +59 -60
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +221 -222
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +24 -26
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VFCFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +168 -165
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +324 -325
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +70 -72
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +1 -1
- package/SVF-doxygen/html/html/classllvm_1_1generic__bridge__gep__type__iterator.html +3 -3
- package/SVF-doxygen/html/html/functions_a.html +9 -12
- package/SVF-doxygen/html/html/functions_func.html +4 -4
- package/SVF-doxygen/html/html/functions_func_i.html +3 -3
- package/SVF-doxygen/html/html/functions_func_r.html +8 -8
- package/SVF-doxygen/html/html/functions_func_s.html +1 -1
- package/SVF-doxygen/html/html/functions_i.html +2 -2
- package/SVF-doxygen/html/html/functions_l.html +8 -8
- package/SVF-doxygen/html/html/functions_n.html +4 -4
- package/SVF-doxygen/html/html/functions_o.html +8 -8
- package/SVF-doxygen/html/html/functions_p.html +14 -16
- package/SVF-doxygen/html/html/functions_r.html +10 -12
- package/SVF-doxygen/html/html/functions_s.html +7 -7
- package/SVF-doxygen/html/html/functions_type.html +0 -3
- package/SVF-doxygen/html/html/functions_v.html +6 -6
- package/SVF-doxygen/html/html/functions_w.html +11 -11
- package/SVF-doxygen/html/html/namespaceSVF.html +175 -193
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +55 -55
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +44 -44
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +46 -46
- package/SVF-doxygen/html/html/namespacemembers_s.html +0 -3
- package/SVF-doxygen/html/html/namespacemembers_type_s.html +0 -3
- package/SVF-doxygen/html/html/search/all_1.js +4 -5
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_11.js +10 -10
- package/SVF-doxygen/html/html/search/all_12.js +5 -6
- package/SVF-doxygen/html/html/search/all_13.js +4 -4
- package/SVF-doxygen/html/html/search/all_15.js +3 -3
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_9.js +2 -2
- package/SVF-doxygen/html/html/search/all_c.js +5 -5
- package/SVF-doxygen/html/html/search/all_e.js +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +4 -4
- package/SVF-doxygen/html/html/search/functions_10.js +8 -8
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_0.js +0 -1
- package/SVF-doxygen/html/html/search/typedefs_10.js +0 -1
- package/SVF-doxygen/html/html/search/variables_13.js +2 -2
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +4 -4
- package/SVF-doxygen/html/html/structSVF_1_1Hash.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01NodePair_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01std_1_1pair_3_01S_00_01T_01_4_01_4.html +5 -5
- package/SVF-doxygen/html/html/structSVF_1_1PopulationCounter.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__convert__val.html +5 -5
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html +4 -4
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__wrap.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__simple__type.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01typename_01std_1_1enable__if_3_01std_1_1101a002941fb8432b76e90258f1ec6b7.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__cl.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__wrap.html +5 -5
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1simplify__type.html +4 -4
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html +6 -6
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement.html +15 -15
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +17 -17
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +17 -17
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +4 -4
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +21 -21
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_4_01_4.html +14 -14
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ICFGNode_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1VFGNode_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +20 -20
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_01_4.html +16 -16
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFGNode_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFGNode_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtDPItem_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmt_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1NodePair_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +6 -6
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1StmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SymState_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +3 -3
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +8 -8
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +9 -9
- package/include/Graphs/ConsGNode.h +48 -24
- package/include/Graphs/GenericGraph.h +4 -2
- package/include/Graphs/ICFG.h +3 -2
- package/include/Graphs/SVFGOPT.h +7 -7
- package/include/Graphs/VFG.h +3 -2
- package/include/MSSA/MemSSA.h +6 -6
- package/include/MemoryModel/PersistentPointsToDS.h +1 -1
- package/include/MemoryModel/PointerAnalysis.h +0 -1
- package/include/MemoryModel/SVFIR.h +3 -1
- package/include/SABER/SaberCondAllocator.h +7 -2
- package/include/SVF-FE/BasicTypes.h +7 -1
- package/include/SVF-FE/IRAnnotator.h +3 -1
- package/include/Util/BasicTypes.h +1 -22
- package/include/Util/Casting.h +1 -0
- package/include/Util/SVFBasicTypes.h +0 -5
- package/include/Util/SparseBitVector.h +2 -0
- package/lib/DDA/ContextDDA.cpp +8 -5
- package/lib/Graphs/ConsG.cpp +46 -23
- package/lib/Graphs/ICFG.cpp +8 -4
- package/lib/Graphs/VFG.cpp +6 -3
- package/lib/MSSA/MemRegion.cpp +1 -0
- package/lib/MTA/MHP.cpp +4 -4
- package/lib/MTA/TCT.cpp +2 -1
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +3 -1
- package/lib/SABER/SaberCondAllocator.cpp +3 -1
- package/lib/SVF-FE/CHGBuilder.cpp +2 -2
- package/lib/SVF-FE/SVFIRBuilder.cpp +4 -1
- package/lib/WPA/AndersenSFR.cpp +3 -0
- package/lib/WPA/TypeAnalysis.cpp +1 -0
- package/package.json +1 -1
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">PersistentPointsToDS.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="PersistentPointsToDS_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * PersistentPointsToDS.h</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Authors: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * The implementation is based on</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Mohamad Barbar and Yulei Sui. Hash Consed Points-To Sets.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * 28th Static Analysis Symposium (SAS'21)</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> */</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifndef PERSISTENT_POINTSTO_H_</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#define PERSISTENT_POINTSTO_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "<a class="code" href="AbstractPointsToDS_8h.html">MemoryModel/AbstractPointsToDS.h</a>"</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="PersistentPointsToCache_8h.html">MemoryModel/PersistentPointsToCache.h</a>"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html"> 26</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html"> 28</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet, <span class="keyword">typename</span> VersionedKey, <span class="keyword">typename</span> VersionedKeySet></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html"> 30</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTData.html">PTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> K, <span class="keyword">typename</span> KS, <span class="keyword">typename</span> D, <span class="keyword">typename</span> DS, <span class="keyword">typename</span> VK, <span class="keyword">typename</span> VKS></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5a0dfa2e5e989bcb30b913f37e561c35"> 37</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aea8bb6da9d6d5a4ed65168aceee2f85a"> 38</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a><Key, KeySet, Data, DataSet>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a8386ddd5a45bd490860685ca18543287"> 39</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a><Key, KeySet, Data, DataSet>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1"> 41</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1">BasePTData</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2"> 42</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2">PTDataTy</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f"> 44</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Key, PointsToID></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">KeyToIDMap</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8"> 45</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Data, KeySet></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">RevPtsMap</a>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e"> 48</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e">PersistentPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersBase)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  : BasePTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache) { }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a66a9367f0b965d18be8bb1247e1c2548"> 51</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a66a9367f0b965d18be8bb1247e1c2548">~PersistentPTData</a>() { }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#abf836f1b063b869215c7e9b53b013d3f"> 53</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#abf836f1b063b869215c7e9b53b013d3f">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>.clear();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>.clear();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99"> 59</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet& <a class="code" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99">getPts</a>(<span class="keyword">const</span> Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a916017f2cc924b10e72120d1d87afd34"> 65</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentPTData.html#a916017f2cc924b10e72120d1d87afd34">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[data];</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a8d53322eadc657ed88a8b724647070b2"> 71</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a8d53322eadc657ed88a8b724647070b2">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  DataSet srcPts;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  srcPts.set(element);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(srcPts);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a236c780af73ab909a66a922bc8645ea4"> 79</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a236c780af73ab909a66a922bc8645ea4">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[srcKey];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a9414aeb024e2c367b9777522aadd5d83"> 85</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a9414aeb024e2c367b9777522aadd5d83">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> DataSet& srcData)<span class="keyword"> override</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(srcData);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#afb2dd005d3d2ad01bdad4b7a1af5477d"> 91</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#afb2dd005d3d2ad01bdad4b7a1af5477d">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a10221452ea6ffed4ae51a9c6f9dc1e93"> 95</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a10221452ea6ffed4ae51a9c6f9dc1e93">clearPts</a>(<span class="keyword">const</span> Key &var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  DataSet toRemoveData;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  toRemoveData.set(element);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> toRemoveId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(toRemoveData);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> varId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var];</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> complementId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">complementPts</a>(varId, toRemoveId);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">if</span> (varId != complementId)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var] = complementId;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[element], var);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aff3437089686869faa772c44bca753b6"> 109</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aff3437089686869faa772c44bca753b6">clearFullPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">clearRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99">getPts</a>(var), var);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var] = <a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">PersistentPointsToCache<DataSet>::emptyPointsToId</a>();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#af8084d77fb666933fd0efe0df983074d"> 115</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#af8084d77fb666933fd0efe0df983074d">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aadba2724dfe3cb745d9e9d73b8c3de67"> 120</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aadba2724dfe3cb745d9e9d73b8c3de67">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (liveOnly)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  allPts = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">getAllPts</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> allPts;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f"> 140</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458"> 145</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersBase;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8"> 154</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(<span class="keyword">const</span> Key &dstKey, <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> dstId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[dstKey];</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> newDstId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">unionPts</a>(dstId, srcId);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordtype">bool</span> changed = newDstId != dstId;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[dstKey] = newDstId;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="comment">// Reverse points-to only needs to be handled when dst's</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// points-to set has changed (i.e., do it the first time only).</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">const</span> DataSet &srcPts = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(srcId);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Data &d : srcPts) <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(dstKey, <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[d]);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c"> 176</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(KeySet &revSet, <span class="keyword">const</span> Key &k)</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aee74719d33695e4da6fee5fc83f745d9">SVFUtil::removeKey</a>(k, revSet);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0"> 184</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">clearRevPts</a>(<span class="keyword">const</span> DataSet &pts, <span class="keyword">const</span> Key &k)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Data &d : pts) <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[d], k);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f"> 193</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e"> 194</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>;</div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563"> 195</a></span>  RevPtsMap <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> };</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html"> 200</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c"> 203</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c">BasePTData</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6"> 204</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6">BaseDiffPTData</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5"> 205</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5">BasePersPTData</a>;</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812"> 206</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812">PTDataTy</a>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215"> 208</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">BasePersPTData::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215">KeyToIDMap</a>;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305"> 209</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">BasePersPTData::RevPtsMap</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305">RevPtsMap</a>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411"> 212</a></span>  <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411">PersistentDiffPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersDiff)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  : BaseDiffPTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache), persPTData(cache, reversePT) { }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a311ada9c9a0376c71dae24841cc60b7a"> 215</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a311ada9c9a0376c71dae24841cc60b7a">~PersistentDiffPTData</a>() { }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a10504f854b1b390818f8ee12182d857c"> 217</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a10504f854b1b390818f8ee12182d857c">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  persPTData.clear();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  diffPtsMap.clear();</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  propaPtsMap.clear();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9982ecf42416756a0729a28e8713cfed"> 224</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9982ecf42416756a0729a28e8713cfed">getPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> persPTData.getPts(var);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a7a12f89c0de40dbcb5fe48219a7c121b"> 229</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a7a12f89c0de40dbcb5fe48219a7c121b">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentDiffPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> persPTData.getRevPts(data);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9f748619f67f3ff9c4c4a429e6614989"> 235</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9f748619f67f3ff9c4c4a429e6614989">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> persPTData.addPts(dstKey, element);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9cc43f58ea3be1b7fbc7df7cfe965c3c"> 240</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9cc43f58ea3be1b7fbc7df7cfe965c3c">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcKey);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa9aac7ff120abf87e7edfe233691f00f"> 245</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa9aac7ff120abf87e7edfe233691f00f">unionPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcDataSet);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ab01a663b665d629c15f3531f18b5abc2"> 250</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ab01a663b665d629c15f3531f18b5abc2">clearPts</a>(<span class="keyword">const</span> Key &var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> persPTData.clearPts(var, element);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ae4b558e119c7e3fae25a0b4509422c87"> 255</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ae4b558e119c7e3fae25a0b4509422c87">clearFullPts</a>(<span class="keyword">const</span> Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">return</span> persPTData.clearFullPts(var);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#add8c649853678b6c7acfa4217f1b7ee0"> 260</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#add8c649853678b6c7acfa4217f1b7ee0">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac7caee8468f12e87a70837a8f2e9685c"> 265</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac7caee8468f12e87a70837a8f2e9685c">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// TODO.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a76ae2ef87bc32c2f6466e7bc2dfad726"> 270</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a76ae2ef87bc32c2f6466e7bc2dfad726">getDiffPts</a>(Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = diffPtsMap[var];</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ae42379dbabbd66dfd91e305673788ed3"> 276</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ae42379dbabbd66dfd91e305673788ed3">computeDiffPts</a>(Key &var, <span class="keyword">const</span> DataSet &all)<span class="keyword"> override</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> propaId = propaPtsMap[var];</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> allId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(all);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="comment">// Diff is made up of the entire points-to set minus what has been propagated.</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> diffId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">complementPts</a>(allId, propaId);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  diffPtsMap[var] = diffId;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="comment">// We've now propagated the entire thing.</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  propaPtsMap[var] = allId;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Whether diff is empty or not; just need to check against the ID since it</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// is the only empty set.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> diffId != <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">emptyPointsToId</a>();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#adb2c450f2c93fbf630d91b8c2697fa06"> 292</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#adb2c450f2c93fbf630d91b8c2697fa06">updatePropaPtsMap</a>(Key &src, Key &dst)<span class="keyword"> override</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> dstId = propaPtsMap[dst];</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = propaPtsMap[src];</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  propaPtsMap[dst] = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a17d33558208c19019e541ee167009494">intersectPts</a>(dstId, srcId);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa00e0bfaf2d46f2aa83a37c7c9514edb"> 299</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa00e0bfaf2d46f2aa83a37c7c9514edb">clearPropaPts</a>(Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  propaPtsMap[var] = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">emptyPointsToId</a>();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a3bad0126e25b0a7134e8ef25869bd40e"> 304</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a3bad0126e25b0a7134e8ef25869bd40e">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> persPTData.getAllPts(liveOnly);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c"> 311</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88"> 316</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersDiff;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2"> 323</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2">ptCache</a>;</div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9"> 325</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9">persPTData</a>;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22"> 327</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22">diffPtsMap</a>;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad"> 329</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad">propaPtsMap</a>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> };</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c"> 337</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c">BasePTData</a>;</div><div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8"> 338</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8">PTDataTy</a>;</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17"> 339</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17">BaseDFPTData</a>;</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d"> 340</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d">BasePersPTData</a>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b"> 342</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">BaseDFPTData::LocID</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b">LocID</a>;</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f"> 343</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">BasePersPTData::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f">KeyToIDMap</a>;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90"> 344</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<LocID, KeyToIDMap></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90">DFKeyToIDMap</a>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4"> 346</a></span>  <a class="code" href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4">PersistentDFPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersDataFlow)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  : BaseDFPTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache), persPTData(cache, reversePT) { }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad9ccba048d0c749d1c2cafc517f78181"> 349</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad9ccba048d0c749d1c2cafc517f78181">~PersistentDFPTData</a>() { }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab070b1baa6a01800edac36dc075107fd"> 351</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab070b1baa6a01800edac36dc075107fd">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  dfInPtsMap.clear();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  dfOutPtsMap.clear();</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  persPTData.clear();</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a5f6a01d0bb40a718bc14f2cc1bb98a13"> 358</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#a5f6a01d0bb40a718bc14f2cc1bb98a13">getPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">return</span> persPTData.getPts(var);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a50c3d871edb13ac5b3f0d625deb6449a"> 363</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentDFPTData.html#a50c3d871edb13ac5b3f0d625deb6449a">getRevPts</a>(<span class="keyword">const</span> Data&)<span class="keyword"> override</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"PersistentDFPTData::getRevPts: not supported yet!"</span>);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">return</span> *(KeySet*)<span class="keyword">nullptr</span>; <span class="comment">// suppress -Werror=return-type</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a0b757b12ace04b7b7d1e081ad1b742cf"> 369</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a0b757b12ace04b7b7d1e081ad1b742cf">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcKey);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a780dc63003f8a0a4c66c1548138fdd86"> 374</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a780dc63003f8a0a4c66c1548138fdd86">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcDataSet);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a95df7d565ba8e990b61b1c932c8d4273"> 379</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a95df7d565ba8e990b61b1c932c8d4273">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> persPTData.addPts(dstKey, element);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af64c6a2c0a1b2044fac56a69e9db7cff"> 384</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af64c6a2c0a1b2044fac56a69e9db7cff">clearPts</a>(<span class="keyword">const</span> Key& var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  persPTData.clearPts(var, element);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afa828c0db9c030584e379e86cf0a25a9"> 389</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#afa828c0db9c030584e379e86cf0a25a9">clearFullPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  persPTData.clearFullPts(var);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aac817d88beae87fcc961a2df7904e61c"> 394</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aac817d88beae87fcc961a2df7904e61c">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a1d168145358e0f69eca023dd9b4363ea"> 399</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a1d168145358e0f69eca023dd9b4363ea">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  persPTData.dumpPTData();</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6e7d072fd2d420870bb959b68c200137"> 404</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6e7d072fd2d420870bb959b68c200137">hasDFInSet</a>(LocID loc)<span class="keyword"> const override</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> dfInPtsMap.find(loc) != dfInPtsMap.end();</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a67c4dec1150bdd8458046696578e5069"> 409</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a67c4dec1150bdd8458046696578e5069">hasDFOutSet</a>(LocID loc)<span class="keyword"> const override</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">return</span> dfOutPtsMap.find(loc) != dfOutPtsMap.end();</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab490fd81739f2bd6dddabd5ce5beac3b"> 414</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab490fd81739f2bd6dddabd5ce5beac3b">hasDFInSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> const override</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">typename</span> DFKeyToIDMap::const_iterator foundInKeyToId = dfInPtsMap.find(loc);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (foundInKeyToId == dfInPtsMap.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">const</span> KeyToIDMap &inKeyToId = foundInKeyToId->second;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> (inKeyToId.find(var) != inKeyToId.end());</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ace47d00f778bc4a714fc4f9d0cbd063c"> 422</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ace47d00f778bc4a714fc4f9d0cbd063c">hasDFOutSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> const override</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">typename</span> DFKeyToIDMap::const_iterator foundOutKeyToId = dfOutPtsMap.find(loc);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (foundOutKeyToId == dfOutPtsMap.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keyword">const</span> KeyToIDMap &outKeyToId = foundOutKeyToId->second;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> (outKeyToId.find(var) != outKeyToId.end());</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a26ca6565c4766e3d6ea6bf435ae910a3"> 430</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#a26ca6565c4766e3d6ea6bf435ae910a3">getDFInPtsSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = dfInPtsMap[loc][var];</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aea89a705aed7e02ddbf73f861506536e"> 436</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#aea89a705aed7e02ddbf73f861506536e">getDFOutPtsSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = dfOutPtsMap[loc][var];</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a9b61c0557c6b1460af2328709011b32e"> 442</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a9b61c0557c6b1460af2328709011b32e">updateDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFInPtIdRef(dstLoc, dstVar), getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a9e2dcff79d55b92bc84ec2bb42d851ac"> 447</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a9e2dcff79d55b92bc84ec2bb42d851ac">updateAllDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">return</span> updateDFInFromIn(srcLoc, srcVar, dstLoc, dstVar);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#abfacbe37d9e0b5f05eabec66c60c2e2b"> 452</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#abfacbe37d9e0b5f05eabec66c60c2e2b">updateDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFInPtIdRef(dstLoc, dstVar), getDFOutPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a67a72d34b62884dee72e0b48b07a7e9f"> 457</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a67a72d34b62884dee72e0b48b07a7e9f">updateAllDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">return</span> updateDFInFromOut(srcLoc, srcVar, dstLoc, dstVar);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a81e6d2d313d7f23fcc2a3d0f5344317f"> 462</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a81e6d2d313d7f23fcc2a3d0f5344317f">updateDFOutFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFOutPtIdRef(dstLoc, dstVar), getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad341c691c11bbdeaa13cfe23919ed070"> 467</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad341c691c11bbdeaa13cfe23919ed070">updateAllDFOutFromIn</a>(LocID loc, <span class="keyword">const</span> Key &singleton, <span class="keywordtype">bool</span> strongUpdates)<span class="keyword"> override</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (this->hasDFInSet(loc))</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keyword">const</span> KeyToIDMap &inKeyToId = dfInPtsMap[loc];</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : inKeyToId)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keyword">const</span> Key var = ki.first;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span> (strongUpdates && var == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">if</span> (updateDFOutFromIn(loc, var, loc, var)) changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  }</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div><div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad7a4b3c68c4b8b70268ee7c919c624d5"> 486</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad7a4b3c68c4b8b70268ee7c919c624d5">clearAllDFOutUpdatedVar</a>(LocID)<span class="keyword"> override</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aa9d13ece84d5f519031b4f3cdb429d61"> 491</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aa9d13ece84d5f519031b4f3cdb429d61">updateTLVPts</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span> unionPtsThroughIds(persPTData.ptsMap[dstVar], getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6761733754abf061e92125988a684fa3"> 496</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6761733754abf061e92125988a684fa3">updateATVPts</a>(<span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFOutPtIdRef(dstLoc, dstVar), persPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a98f84bffeba6bd7dc140f1d5b63ff368"> 501</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a98f84bffeba6bd7dc140f1d5b63ff368">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts = persPTData.getAllPts(liveOnly);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> DFKeyToIDMap::value_type &lki : dfInPtsMap)</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : lki.second)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> DFKeyToIDMap::value_type &lki : dfOutPtsMap)</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : lki.second)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">if</span> (!liveOnly)</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="comment">// Subtract 1 from each counted points-to set because the live points-to</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">// sets have already been inserted and accounted for how often they occur.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="comment">// They will each occur one more time in the cache.</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// In essence, we want the ptCache.getAllPts() to just add the unused, non-GC'd</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// points-to sets to allPts.</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned>::value_type</a> pto : allPts) pto.second -= 1;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">getAllPts</a>());</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">return</span> allPts;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968"> 536</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c"> 541</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> *ptd)</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  {</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersDataFlow</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  || ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersIncDataFlow;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c"> 549</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c">unionPtsThroughIds</a>(<a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &dst, <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &src)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> oldDst = dst;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  dst = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">unionPts</a>(dst, src);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">return</span> oldDst != dst;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b"> 556</a></span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b">getDFInPtIdRef</a>(LocID loc, <span class="keyword">const</span> Key &var)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">return</span> dfInPtsMap[loc][var];</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1"> 561</a></span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1">getDFOutPtIdRef</a>(LocID loc, <span class="keyword">const</span> Key &var)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">return</span> dfOutPtsMap[loc][var];</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00567"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f"> 567</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f">ptCache</a>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820"> 570</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820">persPTData</a>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div><div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868"> 573</a></span>  DFKeyToIDMap <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868">dfInPtsMap</a>;</div><div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc"> 575</a></span>  DFKeyToIDMap <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc">dfOutPtsMap</a>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> };</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00583"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a"> 583</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a">BasePTData</a>;</div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a"> 584</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a">BasePersPTData</a>;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0"> 585</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0">BaseDFPTData</a>;</div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b"> 586</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b">BasePersDFPTData</a>;</div><div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7"> 587</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7">PTDataTy</a>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div><div class="line"><a name="l00589"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1"> 589</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">BaseDFPTData::LocID</a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1">LocID</a>;</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab"> 590</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<LocID, KeySet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab">UpdatedVarMap</a>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940"> 594</a></span>  <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940">PersistentIncDFPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">BasePTData::PersIncDataFlow</a>)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  : BasePersDFPTData(cache, reversePT, ty) { }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aea074e213475c4dc632f8d21e8388868"> 597</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aea074e213475c4dc632f8d21e8388868">~PersistentIncDFPTData</a>() { }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a5b015e6801e4320e45e7942f9db82a42"> 599</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a5b015e6801e4320e45e7942f9db82a42">updateDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  && this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> </div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a9191992b978b643f2d51633b2e330ec6"> 611</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a9191992b978b643f2d51633b2e330ec6">updateDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (varHasNewDFOutPts(srcLoc, srcVar)</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  && this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFOutPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  }</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  }</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a6a26ddacfd726c7078ae560a6b50ad6b"> 623</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a6a26ddacfd726c7078ae560a6b50ad6b">updateDFOutFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar))</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  removeVarFromDFInUpdatedSet(srcLoc, srcVar);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFOutPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  setVarDFOutSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a218ebd39a42b5de8910b98bef9d04f7d"> 638</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a218ebd39a42b5de8910b98bef9d04f7d">updateAllDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFOutPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a2259da9defa195350b3f70cd16c3f2ec"> 649</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a2259da9defa195350b3f70cd16c3f2ec">updateAllDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  }</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a6a59e2297b72cc30553db5e45da70f46"> 660</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a6a59e2297b72cc30553db5e45da70f46">updateAllDFOutFromIn</a>(LocID loc, <span class="keyword">const</span> Key& singleton, <span class="keywordtype">bool</span> strongUpdates)<span class="keyword"> override</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span> (this->hasDFInSet(loc))</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">const</span> KeySet vars = getDFInUpdatedVar(loc);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Key &var : vars)</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">if</span> (strongUpdates && var == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">if</span> (updateDFOutFromIn(loc, var, loc, var)) changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div><div class="line"><a name="l00678"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae4732dd1897883fafa98454b46134bfb"> 678</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae4732dd1897883fafa98454b46134bfb">updateTLVPts</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  removeVarFromDFInUpdatedSet(srcLoc, srcVar);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">return</span> this->unionPtsThroughIds(this->persPTData.ptsMap[dstVar], this->getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div><div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a002e6d234d0ad0c74a0976046e440f71"> 689</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a002e6d234d0ad0c74a0976046e440f71">updateATVPts</a>(<span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFOutPtIdRef(dstLoc, dstVar), this->persPTData.ptsMap[srcVar]))</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  setVarDFOutSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  }</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> </div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a815a7c54c1533f16c3efd0796044afc2"> 700</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a815a7c54c1533f16c3efd0796044afc2">clearAllDFOutUpdatedVar</a>(LocID loc)<span class="keyword"> override</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">if</span> (this->hasDFOutSet(loc))</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  {</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keyword">const</span> KeySet vars = getDFOutUpdatedVar(loc);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Key &var : vars)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  removeVarFromDFOutUpdatedSet(loc, var);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  }</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a5e8036d18088ed272ab052b5cd6ef1ce"> 712</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a5e8036d18088ed272ab052b5cd6ef1ce">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  outUpdatedVarMap.clear();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  inUpdatedVarMap.clear();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  BasePersDFPTData::clear();</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb"> 721</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div><div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7"> 726</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> *ptd)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">BasePTData::PersIncDataFlow</a>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> setVarDFInSetUpdated(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  {</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(var, inUpdatedVarMap[loc]);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div><div class="line"><a name="l00743"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479"> 743</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479">removeVarFromDFInUpdatedSet</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = inUpdatedVarMap.find(loc);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">if</span> (it != inUpdatedVarMap.end()) it->second.erase(var);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  }</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952"> 750</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952">varHasNewDFInPts</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = inUpdatedVarMap.find(loc);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (it != inUpdatedVarMap.end()) <span class="keywordflow">return</span> it->second.find(var) != it->second.end();</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e"> 758</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e">getDFInUpdatedVar</a>(LocID loc)</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> inUpdatedVarMap[loc];</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8"> 767</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8">setVarDFOutSetUpdated</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  {</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(var, outUpdatedVarMap[loc]);</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> </div><div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060"> 773</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060">removeVarFromDFOutUpdatedSet</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = outUpdatedVarMap.find(loc);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">if</span> (it != outUpdatedVarMap.end()) it->second.erase(var);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53"> 780</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53">varHasNewDFOutPts</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = outUpdatedVarMap.find(loc);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">if</span> (it != outUpdatedVarMap.end()) <span class="keywordflow">return</span> it->second.find(var) != it->second.end();</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div><div class="line"><a name="l00788"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e"> 788</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e">getDFOutUpdatedVar</a>(LocID loc)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="keywordflow">return</span> outUpdatedVarMap[loc];</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> </div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00796"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0"> 796</a></span>  UpdatedVarMap <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0">outUpdatedVarMap</a>;</div><div class="line"><a name="l00797"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad"> 797</a></span>  UpdatedVarMap <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad">inUpdatedVarMap</a>;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span> };</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet, <span class="keyword">typename</span> VersionedKey, <span class="keyword">typename</span> VersionedKeySet></div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData</a><Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00808"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db"> 808</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db">BasePTData</a>;</div><div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c"> 809</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData<Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c">BaseVersionedPTData</a>;</div><div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c"> 810</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c">PTDataTy</a>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2"> 812</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">PersistentPTData<Key, KeySet, Data, DataSet>::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2">KeyToIDMap</a>;</div><div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248"> 813</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<VersionedKey, VersionedKeySet, Data, DataSet>::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248">VersionedKeyToIDMap</a>;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div><div class="line"><a name="l00815"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61"> 815</a></span>  <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61">PersistentVersionedPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersVersioned)</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  : BaseVersionedPTData(reversePT, ty), tlPTData(cache, reversePT), atPTData(cache, reversePT) { }</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div><div class="line"><a name="l00818"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2252fcbc06243787b6854d826373da1d"> 818</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2252fcbc06243787b6854d826373da1d">~PersistentVersionedPTData</a>() { }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div><div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ac563829c0d6d091c905bfe16580ceb47"> 820</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ac563829c0d6d091c905bfe16580ceb47">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  tlPTData.clear();</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  atPTData.clear();</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div><div class="line"><a name="l00826"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe80884fa8227e50f28631e20aa6fdf6"> 826</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe80884fa8227e50f28631e20aa6fdf6">getPts</a>(<span class="keyword">const</span> Key& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keywordflow">return</span> tlPTData.getPts(vk);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div><div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a9b81d20e54d08e36edbff43549b1e820"> 830</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a9b81d20e54d08e36edbff43549b1e820">getPts</a>(<span class="keyword">const</span> VersionedKey& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> atPTData.getPts(vk);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span> </div><div class="line"><a name="l00835"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#aafa09ff01060e43f08278963179eec30"> 835</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#aafa09ff01060e43f08278963179eec30">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentVersionedPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">return</span> tlPTData.getRevPts(data);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div><div class="line"><a name="l00840"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2adcebb6cf561eb00e3e05d486c86a9c"> 840</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> VersionedKeySet& <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2adcebb6cf561eb00e3e05d486c86a9c">getVersionedKeyRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentVersionedPTData::getVersionedKeyRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">return</span> atPTData.getRevPts(data);</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  }</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div><div class="line"><a name="l00846"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a7f3730473af9218bea520ec0498fb4ac"> 846</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a7f3730473af9218bea520ec0498fb4ac">addPts</a>(<span class="keyword">const</span> Key& k, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">return</span> tlPTData.addPts(k, element);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div><div class="line"><a name="l00850"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ae4877cf4db5b1da5e7d05fe65ae8ed32"> 850</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ae4877cf4db5b1da5e7d05fe65ae8ed32">addPts</a>(<span class="keyword">const</span> VersionedKey& vk, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">return</span> atPTData.addPts(vk, element);</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div><div class="line"><a name="l00855"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe1f57d265c0910ec26567ce850b8421"> 855</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe1f57d265c0910ec26567ce850b8421">unionPts</a>(<span class="keyword">const</span> Key& dstVar, <span class="keyword">const</span> Key& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">return</span> tlPTData.unionPts(dstVar, srcVar);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div><div class="line"><a name="l00859"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab0299bcfee10af8b6ea59444c4d0299d"> 859</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab0299bcfee10af8b6ea59444c4d0299d">unionPts</a>(<span class="keyword">const</span> VersionedKey& dstVar, <span class="keyword">const</span> VersionedKey& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">return</span> atPTData.unionPts(dstVar, srcVar);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  }</div><div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a8ba8e547bf572cd7403cb4fe52c19908"> 863</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a8ba8e547bf572cd7403cb4fe52c19908">unionPts</a>(<span class="keyword">const</span> VersionedKey& dstVar, <span class="keyword">const</span> Key& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">return</span> atPTData.unionPtsFromId(dstVar, tlPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div><div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a83b7e86c11b03889d70b4dff46138987"> 867</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a83b7e86c11b03889d70b4dff46138987">unionPts</a>(<span class="keyword">const</span> Key& dstVar, <span class="keyword">const</span> VersionedKey& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">return</span> tlPTData.unionPtsFromId(dstVar, atPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div><div class="line"><a name="l00871"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a00151507a86b71f99e43fa87b59d65bb"> 871</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a00151507a86b71f99e43fa87b59d65bb">unionPts</a>(<span class="keyword">const</span> Key &dstVar, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">return</span> tlPTData.unionPts(dstVar, srcDataSet);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  }</div><div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ac4b8dc40514b50a77565a385b9a13ca5"> 875</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ac4b8dc40514b50a77565a385b9a13ca5">unionPts</a>(<span class="keyword">const</span> VersionedKey &dstVar, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> atPTData.unionPts(dstVar, srcDataSet);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> </div><div class="line"><a name="l00880"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a9f5bb9d2020973660268c4e5ac98cb61"> 880</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a9f5bb9d2020973660268c4e5ac98cb61">clearPts</a>(<span class="keyword">const</span> Key& k, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  tlPTData.clearPts(k, element);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe724603022a8fed7469f9ecd633febc"> 884</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe724603022a8fed7469f9ecd633febc">clearPts</a>(<span class="keyword">const</span> VersionedKey& vk, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  atPTData.clearPts(vk, element);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div><div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5c31a5faad444bd19005d06ba28d0185"> 889</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5c31a5faad444bd19005d06ba28d0185">clearFullPts</a>(<span class="keyword">const</span> Key& k)<span class="keyword"> override</span></div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  tlPTData.clearFullPts(k);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  }</div><div class="line"><a name="l00893"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a78f2b0ee440ed5b358928ee775e95564"> 893</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a78f2b0ee440ed5b358928ee775e95564">clearFullPts</a>(<span class="keyword">const</span> VersionedKey& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  atPTData.clearFullPts(vk);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00898"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a0b4feff5bc406088216d9e45941fe3ef"> 898</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a0b4feff5bc406088216d9e45941fe3ef">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="comment">// tlPTData and atPTData use the same cache.</span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  tlPTData.remapAllPts();</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  }</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> </div><div class="line"><a name="l00904"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a6c9ad3635f73b805289cc1f14cdcf09a"> 904</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a6c9ad3635f73b805289cc1f14cdcf09a">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="comment">// Explicitly pass in true because if we call it with false,</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="comment">// we will double up on the cache, since it is shared with atPTData.</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="comment">// if liveOnly == false, we will handle it in the if below.</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts = tlPTData.getAllPts(<span class="keyword">true</span>);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, atPTData.getAllPts(<span class="keyword">true</span>));</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">if</span> (!liveOnly)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  {</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="comment">// Subtract 1 from each counted points-to set because the live points-to</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="comment">// sets have already been inserted and accounted for how often they occur.</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="comment">// They will each occur one more time in the cache.</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// In essence, we want the ptCache.getAllPts() to just add the unused, non-GC'd</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="comment">// points-to sets to allPts.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned>::value_type</a> &pto : allPts) pto.second -= 1;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, tlPTData.ptCache.getAllPts());</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  }</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="keywordflow">return</span> allPts;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  }</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> </div><div class="line"><a name="l00926"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a364fc243fe230342b209bb0c3a7d0966"> 926</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a364fc243fe230342b209bb0c3a7d0966">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"== Top-level points-to information\n"</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  tlPTData.dumpPTData();</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"== Address-taken points-to information\n"</span>;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  atPTData.dumpPTData();</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  }</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div><div class="line"><a name="l00936"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da"> 936</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData<Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></a> *)</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div><div class="line"><a name="l00941"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f"> 941</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  {</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersVersioned;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span> </div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00949"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5"> 949</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5">tlPTData</a>;</div><div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473"> 951</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<VersionedKey, VersionedKeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473">atPTData</a>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> };</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span> </div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="preprocessor">#endif // MUTABLE_POINTSTO_H_</span></div><div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a054f8e2a0668387c092b2802e64a4df0"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0">SVF::PersistentIncDFPTData::outUpdatedVarMap</a></div><div class="ttdeci">UpdatedVarMap outUpdatedVarMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00796">PersistentPointsToDS.h:796</a></div></div>
|
|
69
|
+
<a href="PersistentPointsToDS_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * PersistentPointsToDS.h</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Authors: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * The implementation is based on</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Mohamad Barbar and Yulei Sui. Hash Consed Points-To Sets.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * 28th Static Analysis Symposium (SAS'21)</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> */</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifndef PERSISTENT_POINTSTO_H_</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#define PERSISTENT_POINTSTO_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "<a class="code" href="AbstractPointsToDS_8h.html">MemoryModel/AbstractPointsToDS.h</a>"</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="PersistentPointsToCache_8h.html">MemoryModel/PersistentPointsToCache.h</a>"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html"> 26</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html"> 28</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet, <span class="keyword">typename</span> VersionedKey, <span class="keyword">typename</span> VersionedKeySet></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html"> 30</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTData.html">PTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> K, <span class="keyword">typename</span> KS, <span class="keyword">typename</span> D, <span class="keyword">typename</span> DS, <span class="keyword">typename</span> VK, <span class="keyword">typename</span> VKS></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5a0dfa2e5e989bcb30b913f37e561c35"> 37</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aea8bb6da9d6d5a4ed65168aceee2f85a"> 38</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a><Key, KeySet, Data, DataSet>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a8386ddd5a45bd490860685ca18543287"> 39</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a><Key, KeySet, Data, DataSet>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1"> 41</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1">BasePTData</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2"> 42</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2">PTDataTy</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f"> 44</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Key, PointsToID></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">KeyToIDMap</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8"> 45</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Data, KeySet></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">RevPtsMap</a>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e"> 48</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e">PersistentPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersBase)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  : BasePTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache) { }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a66a9367f0b965d18be8bb1247e1c2548"> 51</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a66a9367f0b965d18be8bb1247e1c2548">~PersistentPTData</a>() { }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#abf836f1b063b869215c7e9b53b013d3f"> 53</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#abf836f1b063b869215c7e9b53b013d3f">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>.clear();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>.clear();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99"> 59</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet& <a class="code" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99">getPts</a>(<span class="keyword">const</span> Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a916017f2cc924b10e72120d1d87afd34"> 65</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentPTData.html#a916017f2cc924b10e72120d1d87afd34">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[data];</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a8d53322eadc657ed88a8b724647070b2"> 71</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a8d53322eadc657ed88a8b724647070b2">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  DataSet srcPts;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  srcPts.set(element);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(srcPts);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a236c780af73ab909a66a922bc8645ea4"> 79</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a236c780af73ab909a66a922bc8645ea4">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[srcKey];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a9414aeb024e2c367b9777522aadd5d83"> 85</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a9414aeb024e2c367b9777522aadd5d83">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> DataSet& srcData)<span class="keyword"> override</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(srcData);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#afb2dd005d3d2ad01bdad4b7a1af5477d"> 91</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#afb2dd005d3d2ad01bdad4b7a1af5477d">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a10221452ea6ffed4ae51a9c6f9dc1e93"> 95</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a10221452ea6ffed4ae51a9c6f9dc1e93">clearPts</a>(<span class="keyword">const</span> Key &var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  DataSet toRemoveData;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  toRemoveData.set(element);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> toRemoveId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(toRemoveData);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> varId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var];</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> complementId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">complementPts</a>(varId, toRemoveId);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">if</span> (varId != complementId)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var] = complementId;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[element], var);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aff3437089686869faa772c44bca753b6"> 109</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aff3437089686869faa772c44bca753b6">clearFullPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">clearRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99">getPts</a>(var), var);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var] = <a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">PersistentPointsToCache<DataSet>::emptyPointsToId</a>();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#af8084d77fb666933fd0efe0df983074d"> 115</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#af8084d77fb666933fd0efe0df983074d">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aadba2724dfe3cb745d9e9d73b8c3de67"> 120</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aadba2724dfe3cb745d9e9d73b8c3de67">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (liveOnly)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  allPts = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">getAllPts</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> allPts;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f"> 140</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458"> 145</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersBase;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8"> 154</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(<span class="keyword">const</span> Key &dstKey, <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> dstId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[dstKey];</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> newDstId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">unionPts</a>(dstId, srcId);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordtype">bool</span> changed = newDstId != dstId;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[dstKey] = newDstId;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="comment">// Reverse points-to only needs to be handled when dst's</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// points-to set has changed (i.e., do it the first time only).</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">const</span> DataSet &srcPts = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(srcId);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Data &d : srcPts) <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(dstKey, <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[d]);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c"> 176</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(KeySet &revSet, <span class="keyword">const</span> Key &k)</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aee74719d33695e4da6fee5fc83f745d9">SVFUtil::removeKey</a>(k, revSet);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0"> 184</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">clearRevPts</a>(<span class="keyword">const</span> DataSet &pts, <span class="keyword">const</span> Key &k)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Data &d : pts) <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[d], k);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f"> 193</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e"> 194</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>;</div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563"> 195</a></span>  RevPtsMap <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> };</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html"> 200</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c"> 203</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c">BasePTData</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6"> 204</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6">BaseDiffPTData</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5"> 205</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5">BasePersPTData</a>;</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812"> 206</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812">PTDataTy</a>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215"> 208</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">BasePersPTData::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215">KeyToIDMap</a>;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305"> 209</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">BasePersPTData::RevPtsMap</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305">RevPtsMap</a>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411"> 212</a></span>  <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411">PersistentDiffPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersDiff)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  : BaseDiffPTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache), persPTData(cache, reversePT) { }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a311ada9c9a0376c71dae24841cc60b7a"> 215</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a311ada9c9a0376c71dae24841cc60b7a">~PersistentDiffPTData</a>() { }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a10504f854b1b390818f8ee12182d857c"> 217</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a10504f854b1b390818f8ee12182d857c">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  persPTData.clear();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  diffPtsMap.clear();</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  propaPtsMap.clear();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9982ecf42416756a0729a28e8713cfed"> 224</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9982ecf42416756a0729a28e8713cfed">getPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> persPTData.getPts(var);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a7a12f89c0de40dbcb5fe48219a7c121b"> 229</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a7a12f89c0de40dbcb5fe48219a7c121b">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentDiffPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> persPTData.getRevPts(data);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9f748619f67f3ff9c4c4a429e6614989"> 235</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9f748619f67f3ff9c4c4a429e6614989">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> persPTData.addPts(dstKey, element);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9cc43f58ea3be1b7fbc7df7cfe965c3c"> 240</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9cc43f58ea3be1b7fbc7df7cfe965c3c">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcKey);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa9aac7ff120abf87e7edfe233691f00f"> 245</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa9aac7ff120abf87e7edfe233691f00f">unionPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcDataSet);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ab01a663b665d629c15f3531f18b5abc2"> 250</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ab01a663b665d629c15f3531f18b5abc2">clearPts</a>(<span class="keyword">const</span> Key &var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> persPTData.clearPts(var, element);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ae4b558e119c7e3fae25a0b4509422c87"> 255</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ae4b558e119c7e3fae25a0b4509422c87">clearFullPts</a>(<span class="keyword">const</span> Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">return</span> persPTData.clearFullPts(var);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#add8c649853678b6c7acfa4217f1b7ee0"> 260</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#add8c649853678b6c7acfa4217f1b7ee0">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac7caee8468f12e87a70837a8f2e9685c"> 265</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac7caee8468f12e87a70837a8f2e9685c">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// TODO.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a76ae2ef87bc32c2f6466e7bc2dfad726"> 270</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a76ae2ef87bc32c2f6466e7bc2dfad726">getDiffPts</a>(Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = diffPtsMap[var];</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ae42379dbabbd66dfd91e305673788ed3"> 276</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ae42379dbabbd66dfd91e305673788ed3">computeDiffPts</a>(Key &var, <span class="keyword">const</span> DataSet &all)<span class="keyword"> override</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> propaId = propaPtsMap[var];</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> allId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(all);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="comment">// Diff is made up of the entire points-to set minus what has been propagated.</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> diffId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">complementPts</a>(allId, propaId);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  diffPtsMap[var] = diffId;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="comment">// We've now propagated the entire thing.</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  propaPtsMap[var] = allId;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Whether diff is empty or not; just need to check against the ID since it</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// is the only empty set.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> diffId != <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">emptyPointsToId</a>();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#adb2c450f2c93fbf630d91b8c2697fa06"> 292</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#adb2c450f2c93fbf630d91b8c2697fa06">updatePropaPtsMap</a>(Key &src, Key &dst)<span class="keyword"> override</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> dstId = propaPtsMap[dst];</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = propaPtsMap[src];</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  propaPtsMap[dst] = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a17d33558208c19019e541ee167009494">intersectPts</a>(dstId, srcId);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa00e0bfaf2d46f2aa83a37c7c9514edb"> 299</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa00e0bfaf2d46f2aa83a37c7c9514edb">clearPropaPts</a>(Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  propaPtsMap[var] = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">emptyPointsToId</a>();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a3bad0126e25b0a7134e8ef25869bd40e"> 304</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a3bad0126e25b0a7134e8ef25869bd40e">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> persPTData.getAllPts(liveOnly);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c"> 311</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88"> 316</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersDiff;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2"> 323</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2">ptCache</a>;</div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9"> 325</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9">persPTData</a>;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22"> 327</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22">diffPtsMap</a>;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad"> 329</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad">propaPtsMap</a>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> };</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c"> 337</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c">BasePTData</a>;</div><div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8"> 338</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8">PTDataTy</a>;</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17"> 339</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17">BaseDFPTData</a>;</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d"> 340</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d">BasePersPTData</a>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b"> 342</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">BaseDFPTData::LocID</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b">LocID</a>;</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f"> 343</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">BasePersPTData::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f">KeyToIDMap</a>;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90"> 344</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<LocID, KeyToIDMap></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90">DFKeyToIDMap</a>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4"> 346</a></span>  <a class="code" href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4">PersistentDFPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersDataFlow)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  : BaseDFPTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache), persPTData(cache, reversePT) { }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad9ccba048d0c749d1c2cafc517f78181"> 349</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad9ccba048d0c749d1c2cafc517f78181">~PersistentDFPTData</a>() { }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab070b1baa6a01800edac36dc075107fd"> 351</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab070b1baa6a01800edac36dc075107fd">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  dfInPtsMap.clear();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  dfOutPtsMap.clear();</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  persPTData.clear();</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a5f6a01d0bb40a718bc14f2cc1bb98a13"> 358</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#a5f6a01d0bb40a718bc14f2cc1bb98a13">getPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">return</span> persPTData.getPts(var);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a50c3d871edb13ac5b3f0d625deb6449a"> 363</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentDFPTData.html#a50c3d871edb13ac5b3f0d625deb6449a">getRevPts</a>(<span class="keyword">const</span> Data&)<span class="keyword"> override</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"PersistentDFPTData::getRevPts: not supported yet!"</span>);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  abort();</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a0b757b12ace04b7b7d1e081ad1b742cf"> 369</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a0b757b12ace04b7b7d1e081ad1b742cf">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcKey);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a780dc63003f8a0a4c66c1548138fdd86"> 374</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a780dc63003f8a0a4c66c1548138fdd86">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcDataSet);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a95df7d565ba8e990b61b1c932c8d4273"> 379</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a95df7d565ba8e990b61b1c932c8d4273">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> persPTData.addPts(dstKey, element);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af64c6a2c0a1b2044fac56a69e9db7cff"> 384</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af64c6a2c0a1b2044fac56a69e9db7cff">clearPts</a>(<span class="keyword">const</span> Key& var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  persPTData.clearPts(var, element);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afa828c0db9c030584e379e86cf0a25a9"> 389</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#afa828c0db9c030584e379e86cf0a25a9">clearFullPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  persPTData.clearFullPts(var);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aac817d88beae87fcc961a2df7904e61c"> 394</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aac817d88beae87fcc961a2df7904e61c">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a1d168145358e0f69eca023dd9b4363ea"> 399</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a1d168145358e0f69eca023dd9b4363ea">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  persPTData.dumpPTData();</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6e7d072fd2d420870bb959b68c200137"> 404</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6e7d072fd2d420870bb959b68c200137">hasDFInSet</a>(LocID loc)<span class="keyword"> const override</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> dfInPtsMap.find(loc) != dfInPtsMap.end();</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a67c4dec1150bdd8458046696578e5069"> 409</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a67c4dec1150bdd8458046696578e5069">hasDFOutSet</a>(LocID loc)<span class="keyword"> const override</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">return</span> dfOutPtsMap.find(loc) != dfOutPtsMap.end();</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab490fd81739f2bd6dddabd5ce5beac3b"> 414</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab490fd81739f2bd6dddabd5ce5beac3b">hasDFInSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> const override</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">typename</span> DFKeyToIDMap::const_iterator foundInKeyToId = dfInPtsMap.find(loc);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (foundInKeyToId == dfInPtsMap.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">const</span> KeyToIDMap &inKeyToId = foundInKeyToId->second;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> (inKeyToId.find(var) != inKeyToId.end());</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ace47d00f778bc4a714fc4f9d0cbd063c"> 422</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ace47d00f778bc4a714fc4f9d0cbd063c">hasDFOutSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> const override</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">typename</span> DFKeyToIDMap::const_iterator foundOutKeyToId = dfOutPtsMap.find(loc);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (foundOutKeyToId == dfOutPtsMap.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keyword">const</span> KeyToIDMap &outKeyToId = foundOutKeyToId->second;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> (outKeyToId.find(var) != outKeyToId.end());</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a26ca6565c4766e3d6ea6bf435ae910a3"> 430</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#a26ca6565c4766e3d6ea6bf435ae910a3">getDFInPtsSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = dfInPtsMap[loc][var];</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aea89a705aed7e02ddbf73f861506536e"> 436</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#aea89a705aed7e02ddbf73f861506536e">getDFOutPtsSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = dfOutPtsMap[loc][var];</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a9b61c0557c6b1460af2328709011b32e"> 442</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a9b61c0557c6b1460af2328709011b32e">updateDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFInPtIdRef(dstLoc, dstVar), getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a9e2dcff79d55b92bc84ec2bb42d851ac"> 447</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a9e2dcff79d55b92bc84ec2bb42d851ac">updateAllDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">return</span> updateDFInFromIn(srcLoc, srcVar, dstLoc, dstVar);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#abfacbe37d9e0b5f05eabec66c60c2e2b"> 452</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#abfacbe37d9e0b5f05eabec66c60c2e2b">updateDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFInPtIdRef(dstLoc, dstVar), getDFOutPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a67a72d34b62884dee72e0b48b07a7e9f"> 457</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a67a72d34b62884dee72e0b48b07a7e9f">updateAllDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">return</span> updateDFInFromOut(srcLoc, srcVar, dstLoc, dstVar);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a81e6d2d313d7f23fcc2a3d0f5344317f"> 462</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a81e6d2d313d7f23fcc2a3d0f5344317f">updateDFOutFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFOutPtIdRef(dstLoc, dstVar), getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad341c691c11bbdeaa13cfe23919ed070"> 467</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad341c691c11bbdeaa13cfe23919ed070">updateAllDFOutFromIn</a>(LocID loc, <span class="keyword">const</span> Key &singleton, <span class="keywordtype">bool</span> strongUpdates)<span class="keyword"> override</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (this->hasDFInSet(loc))</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keyword">const</span> KeyToIDMap &inKeyToId = dfInPtsMap[loc];</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : inKeyToId)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keyword">const</span> Key var = ki.first;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span> (strongUpdates && var == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">if</span> (updateDFOutFromIn(loc, var, loc, var)) changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  }</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div><div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad7a4b3c68c4b8b70268ee7c919c624d5"> 486</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad7a4b3c68c4b8b70268ee7c919c624d5">clearAllDFOutUpdatedVar</a>(LocID)<span class="keyword"> override</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aa9d13ece84d5f519031b4f3cdb429d61"> 491</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aa9d13ece84d5f519031b4f3cdb429d61">updateTLVPts</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span> unionPtsThroughIds(persPTData.ptsMap[dstVar], getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6761733754abf061e92125988a684fa3"> 496</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6761733754abf061e92125988a684fa3">updateATVPts</a>(<span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFOutPtIdRef(dstLoc, dstVar), persPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a98f84bffeba6bd7dc140f1d5b63ff368"> 501</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a98f84bffeba6bd7dc140f1d5b63ff368">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts = persPTData.getAllPts(liveOnly);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> DFKeyToIDMap::value_type &lki : dfInPtsMap)</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : lki.second)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> DFKeyToIDMap::value_type &lki : dfOutPtsMap)</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : lki.second)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">if</span> (!liveOnly)</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="comment">// Subtract 1 from each counted points-to set because the live points-to</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">// sets have already been inserted and accounted for how often they occur.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="comment">// They will each occur one more time in the cache.</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// In essence, we want the ptCache.getAllPts() to just add the unused, non-GC'd</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// points-to sets to allPts.</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned>::value_type</a> pto : allPts) pto.second -= 1;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">getAllPts</a>());</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">return</span> allPts;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968"> 536</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c"> 541</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> *ptd)</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  {</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersDataFlow</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  || ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersIncDataFlow;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c"> 549</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c">unionPtsThroughIds</a>(<a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &dst, <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &src)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> oldDst = dst;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  dst = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">unionPts</a>(dst, src);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">return</span> oldDst != dst;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b"> 556</a></span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b">getDFInPtIdRef</a>(LocID loc, <span class="keyword">const</span> Key &var)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">return</span> dfInPtsMap[loc][var];</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1"> 561</a></span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1">getDFOutPtIdRef</a>(LocID loc, <span class="keyword">const</span> Key &var)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">return</span> dfOutPtsMap[loc][var];</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00567"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f"> 567</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f">ptCache</a>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820"> 570</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820">persPTData</a>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div><div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868"> 573</a></span>  DFKeyToIDMap <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868">dfInPtsMap</a>;</div><div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc"> 575</a></span>  DFKeyToIDMap <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc">dfOutPtsMap</a>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> };</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00583"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a"> 583</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a">BasePTData</a>;</div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a"> 584</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a">BasePersPTData</a>;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0"> 585</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0">BaseDFPTData</a>;</div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b"> 586</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b">BasePersDFPTData</a>;</div><div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7"> 587</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7">PTDataTy</a>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div><div class="line"><a name="l00589"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1"> 589</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">BaseDFPTData::LocID</a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1">LocID</a>;</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab"> 590</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<LocID, KeySet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab">UpdatedVarMap</a>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940"> 594</a></span>  <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940">PersistentIncDFPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">BasePTData::PersIncDataFlow</a>)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  : BasePersDFPTData(cache, reversePT, ty) { }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aea074e213475c4dc632f8d21e8388868"> 597</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aea074e213475c4dc632f8d21e8388868">~PersistentIncDFPTData</a>() { }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a5b015e6801e4320e45e7942f9db82a42"> 599</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a5b015e6801e4320e45e7942f9db82a42">updateDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  && this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> </div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a9191992b978b643f2d51633b2e330ec6"> 611</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a9191992b978b643f2d51633b2e330ec6">updateDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (varHasNewDFOutPts(srcLoc, srcVar)</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  && this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFOutPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  }</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  }</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a6a26ddacfd726c7078ae560a6b50ad6b"> 623</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a6a26ddacfd726c7078ae560a6b50ad6b">updateDFOutFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar))</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  removeVarFromDFInUpdatedSet(srcLoc, srcVar);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFOutPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  setVarDFOutSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a218ebd39a42b5de8910b98bef9d04f7d"> 638</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a218ebd39a42b5de8910b98bef9d04f7d">updateAllDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFOutPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a2259da9defa195350b3f70cd16c3f2ec"> 649</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a2259da9defa195350b3f70cd16c3f2ec">updateAllDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  }</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a6a59e2297b72cc30553db5e45da70f46"> 660</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a6a59e2297b72cc30553db5e45da70f46">updateAllDFOutFromIn</a>(LocID loc, <span class="keyword">const</span> Key& singleton, <span class="keywordtype">bool</span> strongUpdates)<span class="keyword"> override</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span> (this->hasDFInSet(loc))</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">const</span> KeySet vars = getDFInUpdatedVar(loc);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Key &var : vars)</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">if</span> (strongUpdates && var == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">if</span> (updateDFOutFromIn(loc, var, loc, var)) changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div><div class="line"><a name="l00678"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae4732dd1897883fafa98454b46134bfb"> 678</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae4732dd1897883fafa98454b46134bfb">updateTLVPts</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  removeVarFromDFInUpdatedSet(srcLoc, srcVar);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">return</span> this->unionPtsThroughIds(this->persPTData.ptsMap[dstVar], this->getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div><div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a002e6d234d0ad0c74a0976046e440f71"> 689</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a002e6d234d0ad0c74a0976046e440f71">updateATVPts</a>(<span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFOutPtIdRef(dstLoc, dstVar), this->persPTData.ptsMap[srcVar]))</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  setVarDFOutSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  }</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> </div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a815a7c54c1533f16c3efd0796044afc2"> 700</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a815a7c54c1533f16c3efd0796044afc2">clearAllDFOutUpdatedVar</a>(LocID loc)<span class="keyword"> override</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">if</span> (this->hasDFOutSet(loc))</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  {</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keyword">const</span> KeySet vars = getDFOutUpdatedVar(loc);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Key &var : vars)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  removeVarFromDFOutUpdatedSet(loc, var);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  }</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a5e8036d18088ed272ab052b5cd6ef1ce"> 712</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a5e8036d18088ed272ab052b5cd6ef1ce">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  outUpdatedVarMap.clear();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  inUpdatedVarMap.clear();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  BasePersDFPTData::clear();</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb"> 721</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div><div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7"> 726</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> *ptd)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">BasePTData::PersIncDataFlow</a>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> setVarDFInSetUpdated(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  {</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(var, inUpdatedVarMap[loc]);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div><div class="line"><a name="l00743"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479"> 743</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479">removeVarFromDFInUpdatedSet</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = inUpdatedVarMap.find(loc);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">if</span> (it != inUpdatedVarMap.end()) it->second.erase(var);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  }</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952"> 750</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952">varHasNewDFInPts</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = inUpdatedVarMap.find(loc);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (it != inUpdatedVarMap.end()) <span class="keywordflow">return</span> it->second.find(var) != it->second.end();</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e"> 758</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e">getDFInUpdatedVar</a>(LocID loc)</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> inUpdatedVarMap[loc];</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8"> 767</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8">setVarDFOutSetUpdated</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  {</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(var, outUpdatedVarMap[loc]);</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> </div><div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060"> 773</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060">removeVarFromDFOutUpdatedSet</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = outUpdatedVarMap.find(loc);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">if</span> (it != outUpdatedVarMap.end()) it->second.erase(var);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53"> 780</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53">varHasNewDFOutPts</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = outUpdatedVarMap.find(loc);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">if</span> (it != outUpdatedVarMap.end()) <span class="keywordflow">return</span> it->second.find(var) != it->second.end();</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div><div class="line"><a name="l00788"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e"> 788</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e">getDFOutUpdatedVar</a>(LocID loc)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="keywordflow">return</span> outUpdatedVarMap[loc];</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> </div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00796"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0"> 796</a></span>  UpdatedVarMap <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0">outUpdatedVarMap</a>;</div><div class="line"><a name="l00797"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad"> 797</a></span>  UpdatedVarMap <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad">inUpdatedVarMap</a>;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span> };</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet, <span class="keyword">typename</span> VersionedKey, <span class="keyword">typename</span> VersionedKeySet></div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData</a><Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00808"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db"> 808</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db">BasePTData</a>;</div><div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c"> 809</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData<Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c">BaseVersionedPTData</a>;</div><div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c"> 810</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c">PTDataTy</a>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2"> 812</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">PersistentPTData<Key, KeySet, Data, DataSet>::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2">KeyToIDMap</a>;</div><div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248"> 813</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<VersionedKey, VersionedKeySet, Data, DataSet>::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248">VersionedKeyToIDMap</a>;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div><div class="line"><a name="l00815"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61"> 815</a></span>  <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61">PersistentVersionedPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersVersioned)</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  : BaseVersionedPTData(reversePT, ty), tlPTData(cache, reversePT), atPTData(cache, reversePT) { }</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div><div class="line"><a name="l00818"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2252fcbc06243787b6854d826373da1d"> 818</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2252fcbc06243787b6854d826373da1d">~PersistentVersionedPTData</a>() { }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div><div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ac563829c0d6d091c905bfe16580ceb47"> 820</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ac563829c0d6d091c905bfe16580ceb47">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  tlPTData.clear();</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  atPTData.clear();</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div><div class="line"><a name="l00826"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe80884fa8227e50f28631e20aa6fdf6"> 826</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe80884fa8227e50f28631e20aa6fdf6">getPts</a>(<span class="keyword">const</span> Key& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keywordflow">return</span> tlPTData.getPts(vk);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div><div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a9b81d20e54d08e36edbff43549b1e820"> 830</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a9b81d20e54d08e36edbff43549b1e820">getPts</a>(<span class="keyword">const</span> VersionedKey& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> atPTData.getPts(vk);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span> </div><div class="line"><a name="l00835"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#aafa09ff01060e43f08278963179eec30"> 835</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#aafa09ff01060e43f08278963179eec30">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentVersionedPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">return</span> tlPTData.getRevPts(data);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div><div class="line"><a name="l00840"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2adcebb6cf561eb00e3e05d486c86a9c"> 840</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> VersionedKeySet& <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2adcebb6cf561eb00e3e05d486c86a9c">getVersionedKeyRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentVersionedPTData::getVersionedKeyRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">return</span> atPTData.getRevPts(data);</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  }</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div><div class="line"><a name="l00846"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a7f3730473af9218bea520ec0498fb4ac"> 846</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a7f3730473af9218bea520ec0498fb4ac">addPts</a>(<span class="keyword">const</span> Key& k, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">return</span> tlPTData.addPts(k, element);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div><div class="line"><a name="l00850"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ae4877cf4db5b1da5e7d05fe65ae8ed32"> 850</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ae4877cf4db5b1da5e7d05fe65ae8ed32">addPts</a>(<span class="keyword">const</span> VersionedKey& vk, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">return</span> atPTData.addPts(vk, element);</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div><div class="line"><a name="l00855"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe1f57d265c0910ec26567ce850b8421"> 855</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe1f57d265c0910ec26567ce850b8421">unionPts</a>(<span class="keyword">const</span> Key& dstVar, <span class="keyword">const</span> Key& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">return</span> tlPTData.unionPts(dstVar, srcVar);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div><div class="line"><a name="l00859"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab0299bcfee10af8b6ea59444c4d0299d"> 859</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab0299bcfee10af8b6ea59444c4d0299d">unionPts</a>(<span class="keyword">const</span> VersionedKey& dstVar, <span class="keyword">const</span> VersionedKey& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">return</span> atPTData.unionPts(dstVar, srcVar);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  }</div><div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a8ba8e547bf572cd7403cb4fe52c19908"> 863</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a8ba8e547bf572cd7403cb4fe52c19908">unionPts</a>(<span class="keyword">const</span> VersionedKey& dstVar, <span class="keyword">const</span> Key& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">return</span> atPTData.unionPtsFromId(dstVar, tlPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div><div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a83b7e86c11b03889d70b4dff46138987"> 867</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a83b7e86c11b03889d70b4dff46138987">unionPts</a>(<span class="keyword">const</span> Key& dstVar, <span class="keyword">const</span> VersionedKey& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">return</span> tlPTData.unionPtsFromId(dstVar, atPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div><div class="line"><a name="l00871"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a00151507a86b71f99e43fa87b59d65bb"> 871</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a00151507a86b71f99e43fa87b59d65bb">unionPts</a>(<span class="keyword">const</span> Key &dstVar, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">return</span> tlPTData.unionPts(dstVar, srcDataSet);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  }</div><div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ac4b8dc40514b50a77565a385b9a13ca5"> 875</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ac4b8dc40514b50a77565a385b9a13ca5">unionPts</a>(<span class="keyword">const</span> VersionedKey &dstVar, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> atPTData.unionPts(dstVar, srcDataSet);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> </div><div class="line"><a name="l00880"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a9f5bb9d2020973660268c4e5ac98cb61"> 880</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a9f5bb9d2020973660268c4e5ac98cb61">clearPts</a>(<span class="keyword">const</span> Key& k, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  tlPTData.clearPts(k, element);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe724603022a8fed7469f9ecd633febc"> 884</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe724603022a8fed7469f9ecd633febc">clearPts</a>(<span class="keyword">const</span> VersionedKey& vk, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  atPTData.clearPts(vk, element);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div><div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5c31a5faad444bd19005d06ba28d0185"> 889</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5c31a5faad444bd19005d06ba28d0185">clearFullPts</a>(<span class="keyword">const</span> Key& k)<span class="keyword"> override</span></div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  tlPTData.clearFullPts(k);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  }</div><div class="line"><a name="l00893"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a78f2b0ee440ed5b358928ee775e95564"> 893</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a78f2b0ee440ed5b358928ee775e95564">clearFullPts</a>(<span class="keyword">const</span> VersionedKey& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  atPTData.clearFullPts(vk);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00898"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a0b4feff5bc406088216d9e45941fe3ef"> 898</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a0b4feff5bc406088216d9e45941fe3ef">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="comment">// tlPTData and atPTData use the same cache.</span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  tlPTData.remapAllPts();</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  }</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> </div><div class="line"><a name="l00904"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a6c9ad3635f73b805289cc1f14cdcf09a"> 904</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a6c9ad3635f73b805289cc1f14cdcf09a">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="comment">// Explicitly pass in true because if we call it with false,</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="comment">// we will double up on the cache, since it is shared with atPTData.</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="comment">// if liveOnly == false, we will handle it in the if below.</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts = tlPTData.getAllPts(<span class="keyword">true</span>);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, atPTData.getAllPts(<span class="keyword">true</span>));</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">if</span> (!liveOnly)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  {</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="comment">// Subtract 1 from each counted points-to set because the live points-to</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="comment">// sets have already been inserted and accounted for how often they occur.</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="comment">// They will each occur one more time in the cache.</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// In essence, we want the ptCache.getAllPts() to just add the unused, non-GC'd</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="comment">// points-to sets to allPts.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned>::value_type</a> &pto : allPts) pto.second -= 1;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, tlPTData.ptCache.getAllPts());</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  }</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="keywordflow">return</span> allPts;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  }</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> </div><div class="line"><a name="l00926"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a364fc243fe230342b209bb0c3a7d0966"> 926</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a364fc243fe230342b209bb0c3a7d0966">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"== Top-level points-to information\n"</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  tlPTData.dumpPTData();</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"== Address-taken points-to information\n"</span>;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  atPTData.dumpPTData();</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  }</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div><div class="line"><a name="l00936"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da"> 936</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData<Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></a> *)</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div><div class="line"><a name="l00941"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f"> 941</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  {</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersVersioned;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span> </div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00949"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5"> 949</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5">tlPTData</a>;</div><div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473"> 951</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<VersionedKey, VersionedKeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473">atPTData</a>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> };</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span> </div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="preprocessor">#endif // MUTABLE_POINTSTO_H_</span></div><div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a054f8e2a0668387c092b2802e64a4df0"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0">SVF::PersistentIncDFPTData::outUpdatedVarMap</a></div><div class="ttdeci">UpdatedVarMap outUpdatedVarMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00796">PersistentPointsToDS.h:796</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a002e6d234d0ad0c74a0976046e440f71"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a002e6d234d0ad0c74a0976046e440f71">SVF::PersistentIncDFPTData::updateATVPts</a></div><div class="ttdeci">virtual bool updateATVPts(const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Update address-taken variables OUT[dstLoc:dstVar] with points-to of top-level pointers. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00689">PersistentPointsToDS.h:689</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1VersionedPTData_html"><div class="ttname"><a href="classSVF_1_1VersionedPTData.html">SVF::VersionedPTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00269">AbstractPointsToDS.h:269</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a81e6d2d313d7f23fcc2a3d0f5344317f"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a81e6d2d313d7f23fcc2a3d0f5344317f">SVF::PersistentDFPTData::updateDFOutFromIn</a></div><div class="ttdeci">virtual bool updateDFOutFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (OUT[dstLoc:dstVar], IN[srcLoc:srcVar]). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00462">PersistentPointsToDS.h:462</a></div></div>
|
|
@@ -127,7 +127,7 @@ $(function() {
|
|
|
127
127
|
<div class="ttc" id="AbstractPointsToDS_8h_html"><div class="ttname"><a href="AbstractPointsToDS_8h.html">AbstractPointsToDS.h</a></div></div>
|
|
128
128
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a34f8226202e1654d4e67916b21ec4d99"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99">SVF::PersistentPTData::getPts</a></div><div class="ttdeci">virtual const DataSet & getPts(const Key &var) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00059">PersistentPointsToDS.h:59</a></div></div>
|
|
129
129
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ad77d7ccad393c995813f8c433c249dfc"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc">SVF::PersistentDFPTData::dfOutPtsMap</a></div><div class="ttdeci">DFKeyToIDMap dfOutPtsMap</div><div class="ttdoc">Address-taken points-to sets in OUT-sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00575">PersistentPointsToDS.h:575</a></div></div>
|
|
130
|
-
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
130
|
+
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00106">SVFBasicTypes.h:106</a></div></div>
|
|
131
131
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ace47d00f778bc4a714fc4f9d0cbd063c"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ace47d00f778bc4a714fc4f9d0cbd063c">SVF::PersistentDFPTData::hasDFOutSet</a></div><div class="ttdeci">virtual bool hasDFOutSet(LocID loc, const Key &var) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00422">PersistentPointsToDS.h:422</a></div></div>
|
|
132
132
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ab070b1baa6a01800edac36dc075107fd"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ab070b1baa6a01800edac36dc075107fd">SVF::PersistentDFPTData::clear</a></div><div class="ttdeci">virtual void clear() override</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00351">PersistentPointsToDS.h:351</a></div></div>
|
|
133
133
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a8ba8e547bf572cd7403cb4fe52c19908"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a8ba8e547bf572cd7403cb4fe52c19908">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const VersionedKey &dstVar, const Key &srcVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00863">PersistentPointsToDS.h:863</a></div></div>
|
|
@@ -220,7 +220,7 @@ $(function() {
|
|
|
220
220
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_af86313e37c5177e45456f813b9b46a4f"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f">SVF::PersistentDFPTData::ptCache</a></div><div class="ttdeci">PersistentPointsToCache< DataSet > & ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00567">PersistentPointsToDS.h:567</a></div></div>
|
|
221
221
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a174c3cac13c839863171621ea25e609f"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f">SVF::PersistentPTData::classof</a></div><div class="ttdeci">static bool classof(const PersistentPTData< Key, KeySet, Data, DataSet > *)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00140">PersistentPointsToDS.h:140</a></div></div>
|
|
222
222
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a5f6a01d0bb40a718bc14f2cc1bb98a13"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a5f6a01d0bb40a718bc14f2cc1bb98a13">SVF::PersistentDFPTData::getPts</a></div><div class="ttdeci">virtual const DataSet & getPts(const Key &var) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00358">PersistentPointsToDS.h:358</a></div></div>
|
|
223
|
-
<div class="ttc" id="namespaceSVF_html_ae545a88267bd2246de827cf590675aca"><div class="ttname"><a href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">SVF::PointsToID</a></div><div class="ttdeci">unsigned PointsToID</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
223
|
+
<div class="ttc" id="namespaceSVF_html_ae545a88267bd2246de827cf590675aca"><div class="ttname"><a href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">SVF::PointsToID</a></div><div class="ttdeci">unsigned PointsToID</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00097">SVFBasicTypes.h:97</a></div></div>
|
|
224
224
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_ad4586331863d67e78c54d919694b58db"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db">SVF::PersistentVersionedPTData::BasePTData</a></div><div class="ttdeci">PTData< Key, KeySet, Data, DataSet > BasePTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00808">PersistentPointsToDS.h:808</a></div></div>
|
|
225
225
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a98f84bffeba6bd7dc140f1d5b63ff368"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a98f84bffeba6bd7dc140f1d5b63ff368">SVF::PersistentDFPTData::getAllPts</a></div><div class="ttdeci">virtual Map< DataSet, unsigned > getAllPts(bool liveOnly) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00501">PersistentPointsToDS.h:501</a></div></div>
|
|
226
226
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_ad449df82589efb4c40affb5fdc46f479"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479">SVF::PersistentIncDFPTData::removeVarFromDFInUpdatedSet</a></div><div class="ttdeci">void removeVarFromDFInUpdatedSet(LocID loc, const Key &var)</div><div class="ttdoc">Remove var from loc&#39;s IN updated set. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00743">PersistentPointsToDS.h:743</a></div></div>
|