svf-tools 1.0.342 → 1.0.346
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/AndersenSCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +15 -15
- package/SVF-doxygen/html/html/ICFGNode_8h.html +7 -7
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +69 -69
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +45 -44
- package/SVF-doxygen/html/html/ICFG_8h_source.html +34 -34
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +6 -6
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MHP_8h_source.html +6 -6
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +9 -9
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +26 -26
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +18 -18
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +12 -12
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +41 -41
- package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +47 -46
- package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PCG_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +17 -17
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +17 -17
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +9 -9
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +31 -31
- package/SVF-doxygen/html/html/SVFG_8h_source.html +27 -27
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +13 -13
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +31 -31
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +14 -14
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +20 -20
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +11 -11
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +19 -19
- package/SVF-doxygen/html/html/VFG_8h_source.html +19 -19
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/annotated.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1CallCHI-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +158 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +852 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallMU-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +60 -60
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +45 -45
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode-members.html +150 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +618 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode-members.html +149 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +624 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode-members.html +144 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +413 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +191 -184
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +69 -66
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode-members.html +144 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +399 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode-members.html +146 -0
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +494 -0
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +61 -61
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MHP-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +196 -196
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +77 -77
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +43 -39
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +90 -90
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PCG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +118 -118
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +107 -107
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +153 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +696 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +159 -159
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +76 -76
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +132 -132
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +58 -58
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +40 -40
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +220 -220
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +41 -41
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +96 -96
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +39 -39
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
- package/SVF-doxygen/html/html/classes.html +16 -16
- package/SVF-doxygen/html/html/functions_a.html +59 -59
- package/SVF-doxygen/html/html/functions_c.html +65 -67
- package/SVF-doxygen/html/html/functions_eval_r.html +3 -0
- package/SVF-doxygen/html/html/functions_f.html +14 -14
- package/SVF-doxygen/html/html/functions_func.html +56 -56
- package/SVF-doxygen/html/html/functions_func_c.html +28 -28
- package/SVF-doxygen/html/html/functions_func_f.html +6 -6
- package/SVF-doxygen/html/html/functions_func_g.html +86 -86
- package/SVF-doxygen/html/html/functions_func_h.html +17 -17
- package/SVF-doxygen/html/html/functions_func_i.html +12 -12
- package/SVF-doxygen/html/html/functions_func_m.html +1 -1
- package/SVF-doxygen/html/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/html/functions_func_r.html +6 -6
- package/SVF-doxygen/html/html/functions_func_s.html +2 -2
- package/SVF-doxygen/html/html/functions_func_t.html +7 -7
- package/SVF-doxygen/html/html/functions_func_u.html +3 -3
- package/SVF-doxygen/html/html/functions_g.html +88 -88
- package/SVF-doxygen/html/html/functions_h.html +16 -16
- package/SVF-doxygen/html/html/functions_i.html +22 -22
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_m.html +2 -2
- package/SVF-doxygen/html/html/functions_o.html +13 -13
- package/SVF-doxygen/html/html/functions_p.html +14 -14
- package/SVF-doxygen/html/html/functions_r.html +13 -12
- package/SVF-doxygen/html/html/functions_s.html +13 -13
- package/SVF-doxygen/html/html/functions_t.html +12 -14
- package/SVF-doxygen/html/html/functions_type.html +1 -1
- package/SVF-doxygen/html/html/functions_type_c.html +24 -24
- package/SVF-doxygen/html/html/functions_type_f.html +3 -3
- package/SVF-doxygen/html/html/functions_type_i.html +2 -2
- package/SVF-doxygen/html/html/functions_type_p.html +1 -1
- package/SVF-doxygen/html/html/functions_type_s.html +1 -1
- package/SVF-doxygen/html/html/functions_type_v.html +2 -2
- package/SVF-doxygen/html/html/functions_u.html +3 -3
- package/SVF-doxygen/html/html/functions_v.html +8 -8
- package/SVF-doxygen/html/html/functions_vars_a.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_c.html +11 -11
- package/SVF-doxygen/html/html/functions_vars_f.html +5 -5
- package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_i.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_r.html +1 -1
- package/SVF-doxygen/html/html/functions_w.html +9 -5
- package/SVF-doxygen/html/html/hierarchy.html +7 -7
- package/SVF-doxygen/html/html/namespaceSVF.html +11 -11
- package/SVF-doxygen/html/html/search/all_1.js +58 -58
- package/SVF-doxygen/html/html/search/all_10.js +8 -8
- package/SVF-doxygen/html/html/search/all_12.js +8 -7
- package/SVF-doxygen/html/html/search/all_13.js +11 -11
- package/SVF-doxygen/html/html/search/all_14.js +8 -8
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +4 -4
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +35 -34
- package/SVF-doxygen/html/html/search/all_6.js +12 -12
- package/SVF-doxygen/html/html/search/all_7.js +62 -61
- package/SVF-doxygen/html/html/search/all_8.js +17 -17
- package/SVF-doxygen/html/html/search/all_9.js +16 -16
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +5 -5
- package/SVF-doxygen/html/html/search/all_e.js +3 -3
- package/SVF-doxygen/html/html/search/all_f.js +3 -3
- package/SVF-doxygen/html/html/search/classes_2.js +1 -1
- package/SVF-doxygen/html/html/search/classes_5.js +2 -2
- package/SVF-doxygen/html/html/search/classes_6.js +1 -1
- package/SVF-doxygen/html/html/search/classes_8.js +2 -2
- package/SVF-doxygen/html/html/search/classes_e.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_e.js +2 -1
- package/SVF-doxygen/html/html/search/functions_0.js +55 -55
- package/SVF-doxygen/html/html/search/functions_10.js +3 -3
- package/SVF-doxygen/html/html/search/functions_11.js +4 -4
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_2.js +10 -10
- package/SVF-doxygen/html/html/search/functions_5.js +4 -4
- package/SVF-doxygen/html/html/search/functions_6.js +61 -61
- package/SVF-doxygen/html/html/search/functions_7.js +17 -17
- package/SVF-doxygen/html/html/search/functions_8.js +12 -12
- package/SVF-doxygen/html/html/search/functions_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +21 -21
- package/SVF-doxygen/html/html/search/typedefs_5.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_8.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
- package/SVF-doxygen/html/html/search/variables_1.js +2 -2
- package/SVF-doxygen/html/html/search/variables_12.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +4 -4
- package/SVF-doxygen/html/html/search/variables_6.js +5 -5
- package/SVF-doxygen/html/html/search/variables_7.js +1 -1
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +22 -22
- package/include/DDA/ContextDDA.h +3 -3
- package/include/DDA/DDAClient.h +2 -2
- package/include/DDA/DDAVFSolver.h +2 -2
- package/include/DDA/FlowDDA.h +2 -2
- package/include/Graphs/ICFG.h +33 -33
- package/include/Graphs/ICFGNode.h +33 -33
- package/include/Graphs/ICFGStat.h +11 -11
- package/include/Graphs/PTACallGraph.h +19 -19
- package/include/Graphs/SVFG.h +16 -16
- package/include/Graphs/SVFGNode.h +14 -14
- package/include/Graphs/SVFGOPT.h +1 -1
- package/include/Graphs/ThreadCallGraph.h +25 -25
- package/include/Graphs/VFG.h +10 -10
- package/include/Graphs/VFGNode.h +8 -8
- package/include/MSSA/MSSAMuChi.h +6 -6
- package/include/MSSA/MemRegion.h +24 -24
- package/include/MSSA/MemSSA.h +10 -10
- package/include/MTA/LockResultValidator.h +2 -2
- package/include/MTA/MHP.h +4 -4
- package/include/MTA/PCG.h +1 -1
- package/include/MTA/TCT.h +2 -2
- package/include/MemoryModel/PointerAnalysis.h +12 -12
- package/include/MemoryModel/SVFIR.h +21 -21
- package/include/MemoryModel/SVFStatements.h +11 -11
- package/include/SABER/LeakChecker.h +4 -4
- package/include/SABER/ProgSlice.h +2 -2
- package/include/SABER/SaberCheckerAPI.h +4 -4
- package/include/SABER/SaberSVFGBuilder.h +1 -1
- package/include/SABER/SrcSnkDDA.h +1 -1
- package/include/SVF-FE/ICFGBuilder.h +4 -4
- package/include/SVF-FE/SVFIRBuilder.h +5 -5
- package/include/Util/NodeIDAllocator.h +3 -0
- package/lib/DDA/ContextDDA.cpp +3 -3
- package/lib/DDA/DDAClient.cpp +1 -1
- package/lib/DDA/FlowDDA.cpp +1 -1
- package/lib/Graphs/ICFG.cpp +55 -50
- package/lib/Graphs/PTACallGraph.cpp +5 -5
- package/lib/Graphs/SVFG.cpp +7 -7
- package/lib/Graphs/ThreadCallGraph.cpp +6 -6
- package/lib/Graphs/VFG.cpp +6 -6
- package/lib/MSSA/MemRegion.cpp +17 -17
- package/lib/MSSA/MemSSA.cpp +3 -3
- package/lib/MTA/LockAnalysis.cpp +4 -4
- package/lib/MTA/MHP.cpp +5 -5
- package/lib/MTA/MTAResultValidator.cpp +1 -1
- package/lib/MTA/PCG.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysis.cpp +10 -10
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/MemoryModel/SVFIR.cpp +5 -5
- package/lib/SABER/DoubleFreeChecker.cpp +1 -1
- package/lib/SABER/FileChecker.cpp +2 -2
- package/lib/SABER/LeakChecker.cpp +8 -8
- package/lib/SABER/ProgSlice.cpp +2 -2
- package/lib/SVF-FE/CallGraphBuilder.cpp +4 -4
- package/lib/SVF-FE/Graph2Json.cpp +5 -5
- package/lib/SVF-FE/ICFGBuilder.cpp +31 -25
- package/lib/SVF-FE/SVFIRBuilder.cpp +8 -8
- package/lib/Util/NodeIDAllocator.cpp +12 -0
- package/lib/Util/Options.cpp +2 -1
- package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
- package/lib/WPA/Andersen.cpp +3 -3
- package/lib/WPA/FlowSensitive.cpp +2 -2
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
- package/lib/WPA/WPAPass.cpp +4 -4
- package/package.json +1 -1
|
@@ -151,7 +151,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
151
151
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
152
152
|
<div class="textblock"><p>Perform clustering given points-to sets with nodes allocated according to the DENSE strategy. </p>
|
|
153
153
|
|
|
154
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
154
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00105">105</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
155
155
|
</div><h2 class="groupheader">Member Typedef Documentation</h2>
|
|
156
156
|
<a id="a1f74f1e72a844166f742d2d46efbbb5e"></a>
|
|
157
157
|
<h2 class="memtitle"><span class="permalink"><a href="#a1f74f1e72a844166f742d2d46efbbb5e">◆ </a></span>DistOccMap</h2>
|
|
@@ -174,7 +174,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
174
174
|
</div><div class="memdoc">
|
|
175
175
|
<p>Maps a pair of nodes to their (minimum) distance and the number of times that distance occurs in a set of <em>unique</em> points-to sets. </p>
|
|
176
176
|
|
|
177
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
177
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00110">110</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
178
178
|
|
|
179
179
|
</div>
|
|
180
180
|
</div>
|
|
@@ -226,42 +226,42 @@ Static Private Attributes</h2></td></tr>
|
|
|
226
226
|
</div><div class="memdoc">
|
|
227
227
|
<p>Returns vector mapping previously allocated node IDs to a smarter allocation based on the points-to sets in pta accessed through keys. The second part of the keys pairs are the number of (potential) occurrences of that points-to set or a subset, depending on the client's wish. TODO: interfaces are getting unwieldy, an initialised object may be better. TODO: kind of sucks pta can't be const here because getPts isn't. </p>
|
|
228
228
|
|
|
229
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
230
|
-
<div class="fragment"><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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(pta != <span class="keyword">nullptr</span> && <span class="stringliteral">"Clusterer::cluster: given null BVDataPTAImpl"</span>);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a2537be131132830c63d408133619a065">Options::NodeAllocStrat</a> == Strategy::DENSE && <span class="stringliteral">"Clusterer::cluster: only dense allocation clustering currently supported"</span>);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  Map<std::string, std::string> overallStats;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordtype">double</span> totalTime = 0.0;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordtype">double</span> fastClusterTime = 0.0;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordtype">double</span> distanceMatrixTime = 0.0;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordtype">double</span> dendrogramTraversalTime = 0.0;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordtype">double</span> regioningTime = 0.0;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordtype">double</span> evalTime = 0.0;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">// Pair of nodes to their (minimum) distance and the number of occurrences of that distance.</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  Map<std::pair<NodeID, NodeID>, std::pair<unsigned, unsigned>> distances;</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="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="comment">// Map points-to sets to occurrences.</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  Map<PointsTo, unsigned> pointsToSets;</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>  <span class="comment">// Objects each object shares at least a points-to set with.</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  Map<NodeID, Set<NodeID>> coPointeeGraph;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<NodeID, unsigned> &keyOcc : keys)</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">const</span> PointsTo &pts = pta->getPts(keyOcc.first);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> oldSize = pointsToSets.size();</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  pointsToSets[pts] += keyOcc.second;;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="comment">// Edges in this graph have no weight or uniqueness, so we only need to</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// do this for each points-to set once.</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">if</span> (oldSize != pointsToSets.size())</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> firstO = !pts.empty() ? *(pts.begin()) : 0;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  Set<NodeID> &firstOsNeighbours = coPointeeGraph[firstO];</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (o != firstO)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  firstOsNeighbours.insert(o);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  coPointeeGraph[o].insert(firstO);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-><a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">NumObjects</a>] = std::to_string(numObjects);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordtype">size_t</span> numRegions = 0;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  std::vector<unsigned> objectsRegion;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab6115b28808af348e1f6a6b58b4cd84f">Options::RegionedClustering</a>)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  objectsRegion = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a7d34542f34a8e8008119c3d61943daa2">regionObjects</a>(coPointeeGraph, numObjects, numRegions);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="comment">// Just a single big region (0).</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  objectsRegion.insert(objectsRegion.end(), <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, 0);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  numRegions = 1;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="comment">// Set needs to be ordered because getDistanceMatrix, in its n^2 iteration, expects</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="comment">// sets to be ordered (we are building a condensed matrix, not a full matrix, so it</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// matters). In getDistanceMatrix, doing regionReverseMapping for oi and oj, where</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// oi < oj, and getting a result moi > moj gives incorrect results.</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// In the condensed matrix, [b][a] where b >= a, is incorrect.</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  std::vector<OrderedSet<NodeID>> regionsObjects(numRegions);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = 0; o < <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>; ++o) regionsObjects[objectsRegion[o]].insert(o);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="comment">// Size of the return node mapping. It is potentially larger than the number of</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="comment">// objects because we align each region to NATIVE_INT_SIZE.</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordtype">size_t</span> numMappings = 0;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="comment">// Maps a region to a mapping which maps 0 to n to all objects</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="comment">// in that region.</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  std::vector<std::vector<NodeID>> regionMappings(numRegions);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="comment">// The reverse: region to mapping of objects to a 0 to n from above.</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  std::vector<Map<NodeID, unsigned>> regionReverseMappings(numRegions);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">// We can thus use 0 to n for each region to create smaller distance matrices.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> region = 0; region < numRegions; ++region)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordtype">size_t</span> curr = 0;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// With the OrderedSet above, o1 < o2 => map[o1] < map[o2].</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : regionsObjects[region])</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="comment">// push_back here is just like p...[region][curr] = o.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  regionMappings[region].push_back(o);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  regionReverseMappings[region][o] = curr++;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// curr is the number of objects. A region with no objects makes no sense.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(curr != 0);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="comment">// Number of bits needed for this region if we were</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// to start assigning from 0 rounded up to the fewest needed</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="comment">// native ints. This is added to the number of mappings since</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="comment">// we align each region to a native int.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  numMappings += <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(regionsObjects[region].size());</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="comment">// Points-to sets which are relevant to a region, i.e., those whose elements</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="comment">// belong to that region. Pair is for occurences.</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  std::vector<std::vector<std::pair<const PointsTo *, unsigned>>> regionsPointsTos(numRegions);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Map<PointsTo, unsigned>::value_type &ptocc : pointsToSets)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">const</span> PointsTo &pt = ptocc.first;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptocc.second;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (pt.empty()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="comment">// Guaranteed that begin() != end() because of the continue above. All objects in pt</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="comment">// will be relevant to the same region.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordtype">unsigned</span> region = objectsRegion[*(pt.begin())];</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// In our "graph", objects in the same points-to set have an edge between them,</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="comment">// so they are all in the same connected component/region.</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  regionsPointsTos[region].push_back(std::make_pair(&pt, occ));</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  regioningTime = (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">RegioningTime</a>] = std::to_string(regioningTime);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">NumRegions</a>] = std::to_string(numRegions);</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>  std::vector<hclust_fast_methods> methods;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a8e0538a7f2e3c5bece69bc69f7074819">Options::ClusterMethod</a> == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a>)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a>);</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a>);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  methods.push_back(<a class="code" href="classSVF_1_1Options.html#a8e0538a7f2e3c5bece69bc69f7074819">Options::ClusterMethod</a>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a> method : methods)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  std::vector<NodeID> nodeMap(numObjects, UINT_MAX);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordtype">unsigned</span> numGtIntRegions = 0;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordtype">unsigned</span> largestRegion = 0;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordtype">unsigned</span> nonTrivialRegionObjects = 0;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordtype">unsigned</span> allocCounter = 0;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> region = 0; region < numRegions; ++region)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> regionNumObjects = regionsObjects[region].size();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="comment">// Round up to next Word: ceiling of current allocation to get how</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="comment">// many words and multiply to get the number of bits; if we're aligning.</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a88550ed8c4ec2ccc5d5e40869499787b">Options::RegionAlign</a>)</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  allocCounter =</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  ((allocCounter + <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a> - 1) / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>) * <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">if</span> (regionNumObjects > largestRegion) largestRegion = regionNumObjects;</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>  <span class="comment">// For regions with fewer than 64 objects, we can just allocate them</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="comment">// however as they will be in the one int regardless..</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">if</span> (regionNumObjects < <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : regionsObjects[region]) nodeMap[o] = allocCounter++;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  ++numGtIntRegions;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  nonTrivialRegionObjects += regionNumObjects;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordtype">double</span> *distMatrix = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#adf415d244ef1fafe7a7de3c360553c0f">getDistanceMatrix</a>(regionsPointsTos[region], regionNumObjects,</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  regionReverseMappings[region], distanceMatrixTime);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordtype">int</span> *dendrogram = <span class="keyword">new</span> <span class="keywordtype">int</span>[2 * (regionNumObjects - 1)];</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordtype">double</span> *height = <span class="keyword">new</span> <span class="keywordtype">double</span>[regionNumObjects - 1];</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="fastcluster_8h.html#acccd226cbdf0944b5c9e24c84a4599c9">hclust_fast</a>(regionNumObjects, distMatrix, method, dendrogram, height);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keyword">delete</span>[] distMatrix;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keyword">delete</span>[] height;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  fastClusterTime += (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  Set<int> visited;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">traverseDendrogram</a>(nodeMap, dendrogram, regionNumObjects, allocCounter,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  visited, regionNumObjects - 1, regionMappings[region]);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keyword">delete</span>[] dendrogram;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  dendrogramTraversalTime += (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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"> 363</span>  candidates.push_back(std::make_pair(method, nodeMap));</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="comment">// Though we "update" these in the loop, they will be the same every iteration.</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad7cb36a1f0f67864fb8290e9dfd7b639">NumGtIntRegions</a>] = std::to_string(numGtIntRegions);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">LargestRegion</a>] = std::to_string(largestRegion);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">NumNonTrivialRegionObjects</a>] = std::to_string(nonTrivialRegionObjects);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="comment">// Work out which of the mappings we generated looks best.</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  std::pair<hclust_fast_methods, std::vector<NodeID>> bestMapping = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3f86e733cc075180e9682887c554b8fa">determineBestMapping</a>(candidates, pointsToSets,</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  evalSubtitle, evalTime);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">DistanceMatrixTime</a>] = std::to_string(distanceMatrixTime);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">DendrogramTraversalTime</a>] = std::to_string(dendrogramTraversalTime);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">FastClusterTime</a>] = std::to_string(fastClusterTime);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">EvalTime</a>] = std::to_string(evalTime);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">TotalTime</a>] = std::to_string(distanceMatrixTime + dendrogramTraversalTime + fastClusterTime + regioningTime + evalTime);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3556bdda6725b72d0ca88364daeae32e">BestCandidate</a>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVFUtil::hclustMethodToString</a>(bestMapping.first);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">printStats</a>(evalSubtitle + <span class="stringliteral">": overall"</span>, overallStats);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> bestMapping.second;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div><div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ad7cb36a1f0f67864fb8290e9dfd7b639"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad7cb36a1f0f67864fb8290e9dfd7b639">SVF::NodeIDAllocator::Clusterer::NumGtIntRegions</a></div><div class="ttdeci">static const std::string NumGtIntRegions</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00124">NodeIDAllocator.h:124</a></div></div>
|
|
229
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00188">188</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
230
|
+
<div class="fragment"><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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(pta != <span class="keyword">nullptr</span> && <span class="stringliteral">"Clusterer::cluster: given null BVDataPTAImpl"</span>);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#a2537be131132830c63d408133619a065">Options::NodeAllocStrat</a> == Strategy::DENSE && <span class="stringliteral">"Clusterer::cluster: only dense allocation clustering currently supported"</span>);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  Map<std::string, std::string> overallStats;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordtype">double</span> totalTime = 0.0;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordtype">double</span> fastClusterTime = 0.0;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordtype">double</span> distanceMatrixTime = 0.0;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordtype">double</span> dendrogramTraversalTime = 0.0;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordtype">double</span> regioningTime = 0.0;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordtype">double</span> evalTime = 0.0;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="comment">// Pair of nodes to their (minimum) distance and the number of occurrences of that distance.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  Map<std::pair<NodeID, NodeID>, std::pair<unsigned, unsigned>> distances;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// Map points-to sets to occurrences.</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  Map<PointsTo, unsigned> pointsToSets;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="comment">// Objects each object shares at least a points-to set with.</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  Map<NodeID, Set<NodeID>> coPointeeGraph;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<NodeID, unsigned> &keyOcc : keys)</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keyword">const</span> PointsTo &pts = pta->getPts(keyOcc.first);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> oldSize = pointsToSets.size();</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  pointsToSets[pts] += keyOcc.second;;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="comment">// Edges in this graph have no weight or uniqueness, so we only need to</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="comment">// do this for each points-to set once.</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">if</span> (oldSize != pointsToSets.size())</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> firstO = !pts.empty() ? *(pts.begin()) : 0;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  Set<NodeID> &firstOsNeighbours = coPointeeGraph[firstO];</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> (o != firstO)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  firstOsNeighbours.insert(o);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  coPointeeGraph[o].insert(firstO);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</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>  <span class="keywordtype">size_t</span> <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-><a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">NumObjects</a>] = std::to_string(numObjects);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordtype">size_t</span> numRegions = 0;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  std::vector<unsigned> objectsRegion;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ab6115b28808af348e1f6a6b58b4cd84f">Options::RegionedClustering</a>)</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  objectsRegion = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a7d34542f34a8e8008119c3d61943daa2">regionObjects</a>(coPointeeGraph, numObjects, numRegions);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">else</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"> 245</span>  <span class="comment">// Just a single big region (0).</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  objectsRegion.insert(objectsRegion.end(), <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, 0);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  numRegions = 1;</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"> 250</span>  <span class="comment">// Set needs to be ordered because getDistanceMatrix, in its n^2 iteration, expects</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="comment">// sets to be ordered (we are building a condensed matrix, not a full matrix, so it</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="comment">// matters). In getDistanceMatrix, doing regionReverseMapping for oi and oj, where</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="comment">// oi < oj, and getting a result moi > moj gives incorrect results.</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="comment">// In the condensed matrix, [b][a] where b >= a, is incorrect.</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  std::vector<OrderedSet<NodeID>> regionsObjects(numRegions);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = 0; o < <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>; ++o) regionsObjects[objectsRegion[o]].insert(o);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">// Size of the return node mapping. It is potentially larger than the number of</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// objects because we align each region to NATIVE_INT_SIZE.</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordtype">size_t</span> numMappings = 0;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="comment">// Maps a region to a mapping which maps 0 to n to all objects</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="comment">// in that region.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  std::vector<std::vector<NodeID>> regionMappings(numRegions);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">// The reverse: region to mapping of objects to a 0 to n from above.</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  std::vector<Map<NodeID, unsigned>> regionReverseMappings(numRegions);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// We can thus use 0 to n for each region to create smaller distance matrices.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> region = 0; region < numRegions; ++region)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordtype">size_t</span> curr = 0;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// With the OrderedSet above, o1 < o2 => map[o1] < map[o2].</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : regionsObjects[region])</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="comment">// push_back here is just like p...[region][curr] = o.</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  regionMappings[region].push_back(o);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  regionReverseMappings[region][o] = curr++;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="comment">// curr is the number of objects. A region with no objects makes no sense.</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(curr != 0);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// Number of bits needed for this region if we were</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// to start assigning from 0 rounded up to the fewest needed</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="comment">// native ints. This is added to the number of mappings since</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="comment">// we align each region to a native int.</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  numMappings += <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(regionsObjects[region].size());</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="comment">// Points-to sets which are relevant to a region, i.e., those whose elements</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="comment">// belong to that region. Pair is for occurences.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  std::vector<std::vector<std::pair<const PointsTo *, unsigned>>> regionsPointsTos(numRegions);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Map<PointsTo, unsigned>::value_type &ptocc : pointsToSets)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">const</span> PointsTo &pt = ptocc.first;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptocc.second;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span> (pt.empty()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="comment">// Guaranteed that begin() != end() because of the continue above. All objects in pt</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="comment">// will be relevant to the same region.</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordtype">unsigned</span> region = objectsRegion[*(pt.begin())];</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// In our "graph", objects in the same points-to set have an edge between them,</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="comment">// so they are all in the same connected component/region.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  regionsPointsTos[region].push_back(std::make_pair(&pt, occ));</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  regioningTime = (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">RegioningTime</a>] = std::to_string(regioningTime);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">NumRegions</a>] = std::to_string(numRegions);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  std::vector<hclust_fast_methods> methods;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a8e0538a7f2e3c5bece69bc69f7074819">Options::ClusterMethod</a> == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</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>  methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a>);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a>);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a>);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  methods.push_back(<a class="code" href="classSVF_1_1Options.html#a8e0538a7f2e3c5bece69bc69f7074819">Options::ClusterMethod</a>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</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="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a> method : methods)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  std::vector<NodeID> nodeMap(numObjects, UINT_MAX);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordtype">unsigned</span> numGtIntRegions = 0;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordtype">unsigned</span> largestRegion = 0;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordtype">unsigned</span> nonTrivialRegionObjects = 0;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordtype">unsigned</span> allocCounter = 0;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> region = 0; region < numRegions; ++region)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> regionNumObjects = regionsObjects[region].size();</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="comment">// Round up to next Word: ceiling of current allocation to get how</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">// many words and multiply to get the number of bits; if we're aligning.</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a88550ed8c4ec2ccc5d5e40869499787b">Options::RegionAlign</a>)</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  allocCounter =</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  ((allocCounter + <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a> - 1) / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>) * <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">if</span> (regionNumObjects > largestRegion) largestRegion = regionNumObjects;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="comment">// For regions with fewer than 64 objects, we can just allocate them</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="comment">// however as they will be in the one int regardless..</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">if</span> (regionNumObjects < <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>)</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : regionsObjects[region]) nodeMap[o] = allocCounter++;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  ++numGtIntRegions;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  nonTrivialRegionObjects += regionNumObjects;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordtype">double</span> *distMatrix = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#adf415d244ef1fafe7a7de3c360553c0f">getDistanceMatrix</a>(regionsPointsTos[region], regionNumObjects,</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  regionReverseMappings[region], distanceMatrixTime);</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>  clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordtype">int</span> *dendrogram = <span class="keyword">new</span> <span class="keywordtype">int</span>[2 * (regionNumObjects - 1)];</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordtype">double</span> *height = <span class="keyword">new</span> <span class="keywordtype">double</span>[regionNumObjects - 1];</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <a class="code" href="fastcluster_8h.html#acccd226cbdf0944b5c9e24c84a4599c9">hclust_fast</a>(regionNumObjects, distMatrix, method, dendrogram, height);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keyword">delete</span>[] distMatrix;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">delete</span>[] height;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  fastClusterTime += (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  Set<int> visited;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">traverseDendrogram</a>(nodeMap, dendrogram, regionNumObjects, allocCounter,</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  visited, regionNumObjects - 1, regionMappings[region]);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">delete</span>[] dendrogram;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  dendrogramTraversalTime += (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  candidates.push_back(std::make_pair(method, nodeMap));</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="comment">// Though we "update" these in the loop, they will be the same every iteration.</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad7cb36a1f0f67864fb8290e9dfd7b639">NumGtIntRegions</a>] = std::to_string(numGtIntRegions);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">LargestRegion</a>] = std::to_string(largestRegion);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">NumNonTrivialRegionObjects</a>] = std::to_string(nonTrivialRegionObjects);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</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>  <span class="comment">// Work out which of the mappings we generated looks best.</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  std::pair<hclust_fast_methods, std::vector<NodeID>> bestMapping = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3f86e733cc075180e9682887c554b8fa">determineBestMapping</a>(candidates, pointsToSets,</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  evalSubtitle, evalTime);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">DistanceMatrixTime</a>] = std::to_string(distanceMatrixTime);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">DendrogramTraversalTime</a>] = std::to_string(dendrogramTraversalTime);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">FastClusterTime</a>] = std::to_string(fastClusterTime);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">EvalTime</a>] = std::to_string(evalTime);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">TotalTime</a>] = std::to_string(distanceMatrixTime + dendrogramTraversalTime + fastClusterTime + regioningTime + evalTime);</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>  overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3556bdda6725b72d0ca88364daeae32e">BestCandidate</a>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVFUtil::hclustMethodToString</a>(bestMapping.first);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">printStats</a>(evalSubtitle + <span class="stringliteral">": overall"</span>, overallStats);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">return</span> bestMapping.second;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ad7cb36a1f0f67864fb8290e9dfd7b639"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad7cb36a1f0f67864fb8290e9dfd7b639">SVF::NodeIDAllocator::Clusterer::NumGtIntRegions</a></div><div class="ttdeci">static const std::string NumGtIntRegions</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00127">NodeIDAllocator.h:127</a></div></div>
|
|
231
231
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
232
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a9aea96839c51ac1e2cbf4813174bb21c"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">SVF::NodeIDAllocator::Clusterer::requiredBits</a></div><div class="ttdeci">static unsigned requiredBits(const PointsTo &pts)</div><div class="ttdoc">Returns the minimum number of bits required to represent pts in a perfect world. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
233
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a67ab9cffacc1584b2e7bae5d1b08c541"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">SVF::NodeIDAllocator::Clusterer::DendrogramTraversalTime</a></div><div class="ttdeci">static const std::string DendrogramTraversalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
232
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a9aea96839c51ac1e2cbf4813174bb21c"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">SVF::NodeIDAllocator::Clusterer::requiredBits</a></div><div class="ttdeci">static unsigned requiredBits(const PointsTo &pts)</div><div class="ttdoc">Returns the minimum number of bits required to represent pts in a perfect world. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00419">NodeIDAllocator.cpp:419</a></div></div>
|
|
233
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a67ab9cffacc1584b2e7bae5d1b08c541"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">SVF::NodeIDAllocator::Clusterer::DendrogramTraversalTime</a></div><div class="ttdeci">static const std::string DendrogramTraversalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00118">NodeIDAllocator.h:118</a></div></div>
|
|
234
234
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
235
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a190c729a3f3f622f82cee4917946b50f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">SVF::NodeIDAllocator::numObjects</a></div><div class="ttdeci">NodeID numObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
235
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a190c729a3f3f622f82cee4917946b50f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">SVF::NodeIDAllocator::numObjects</a></div><div class="ttdeci">NodeID numObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00087">NodeIDAllocator.h:87</a></div></div>
|
|
236
236
|
<div class="ttc" id="classSVF_1_1Options_html_a2537be131132830c63d408133619a065"><div class="ttname"><a href="classSVF_1_1Options.html#a2537be131132830c63d408133619a065">SVF::Options::NodeAllocStrat</a></div><div class="ttdeci">static const llvm::cl::opt< SVF::NodeIDAllocator::Strategy > NodeAllocStrat</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00034">Options.h:34</a></div></div>
|
|
237
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afa74c5ccd22bebe0b76db33066d8b498"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">SVF::NodeIDAllocator::Clusterer::NumObjects</a></div><div class="ttdeci">static const std::string NumObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
238
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ad5f733cad8a103a64e80270acb67567a"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">SVF::NodeIDAllocator::Clusterer::RegioningTime</a></div><div class="ttdeci">static const std::string RegioningTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
237
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afa74c5ccd22bebe0b76db33066d8b498"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">SVF::NodeIDAllocator::Clusterer::NumObjects</a></div><div class="ttdeci">static const std::string NumObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00114">NodeIDAllocator.h:114</a></div></div>
|
|
238
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ad5f733cad8a103a64e80270acb67567a"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">SVF::NodeIDAllocator::Clusterer::RegioningTime</a></div><div class="ttdeci">static const std::string RegioningTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00115">NodeIDAllocator.h:115</a></div></div>
|
|
239
239
|
<div class="ttc" id="fastcluster_8h_html_acccd226cbdf0944b5c9e24c84a4599c9"><div class="ttname"><a href="fastcluster_8h.html#acccd226cbdf0944b5c9e24c84a4599c9">hclust_fast</a></div><div class="ttdeci">int hclust_fast(int n, double *distmat, int method, int *merge, double *height)</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8cpp_source.html#l00133">fastcluster.cpp:133</a></div></div>
|
|
240
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac10cbda6a84ce890c9946a5ff35800b7"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">SVF::NodeIDAllocator::Clusterer::printStats</a></div><div class="ttdeci">static void printStats(std::string title, Map< std::string, std::string > &stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
241
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ae78d2b60035350c634f6f58d7a043c22"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">SVF::NodeIDAllocator::Clusterer::FastClusterTime</a></div><div class="ttdeci">static const std::string FastClusterTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
240
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac10cbda6a84ce890c9946a5ff35800b7"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">SVF::NodeIDAllocator::Clusterer::printStats</a></div><div class="ttdeci">static void printStats(std::string title, Map< std::string, std::string > &stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00692">NodeIDAllocator.cpp:692</a></div></div>
|
|
241
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ae78d2b60035350c634f6f58d7a043c22"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">SVF::NodeIDAllocator::Clusterer::FastClusterTime</a></div><div class="ttdeci">static const std::string FastClusterTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00117">NodeIDAllocator.h:117</a></div></div>
|
|
242
242
|
<div class="ttc" id="classSVF_1_1Options_html_a88550ed8c4ec2ccc5d5e40869499787b"><div class="ttname"><a href="classSVF_1_1Options.html#a88550ed8c4ec2ccc5d5e40869499787b">SVF::Options::RegionAlign</a></div><div class="ttdeci">static const llvm::cl::opt< bool > RegionAlign</div><div class="ttdoc">Align identifiers in each region to a word. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00061">Options.h:61</a></div></div>
|
|
243
243
|
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00069">fastcluster.h:69</a></div></div>
|
|
244
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a3f86e733cc075180e9682887c554b8fa"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3f86e733cc075180e9682887c554b8fa">SVF::NodeIDAllocator::Clusterer::determineBestMapping</a></div><div class="ttdeci">static std::pair< hclust_fast_methods, std::vector< NodeID > > determineBestMapping(const std::vector< std::pair< hclust_fast_methods, std::vector< NodeID >>> &candidates, Map< PointsTo, unsigned > pointsToSets, const std::string &evalSubtitle, double &evalTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
245
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a7d34542f34a8e8008119c3d61943daa2"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a7d34542f34a8e8008119c3d61943daa2">SVF::NodeIDAllocator::Clusterer::regionObjects</a></div><div class="ttdeci">static std::vector< unsigned > regionObjects(const Map< NodeID, Set< NodeID >> &graph, size_t numObjects, size_t &numLabels)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
244
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a3f86e733cc075180e9682887c554b8fa"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3f86e733cc075180e9682887c554b8fa">SVF::NodeIDAllocator::Clusterer::determineBestMapping</a></div><div class="ttdeci">static std::pair< hclust_fast_methods, std::vector< NodeID > > determineBestMapping(const std::vector< std::pair< hclust_fast_methods, std::vector< NodeID >>> &candidates, Map< PointsTo, unsigned > pointsToSets, const std::string &evalSubtitle, double &evalTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00652">NodeIDAllocator.cpp:652</a></div></div>
|
|
245
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a7d34542f34a8e8008119c3d61943daa2"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a7d34542f34a8e8008119c3d61943daa2">SVF::NodeIDAllocator::Clusterer::regionObjects</a></div><div class="ttdeci">static std::vector< unsigned > regionObjects(const Map< NodeID, Set< NodeID >> &graph, size_t numObjects, size_t &numLabels)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00534">NodeIDAllocator.cpp:534</a></div></div>
|
|
246
246
|
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00075">fastcluster.h:75</a></div></div>
|
|
247
247
|
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dd"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a></div><div class="ttdeci">hclust_fast_methods</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00065">fastcluster.h:65</a></div></div>
|
|
248
248
|
<div class="ttc" id="classSVF_1_1Options_html_a8e0538a7f2e3c5bece69bc69f7074819"><div class="ttname"><a href="classSVF_1_1Options.html#a8e0538a7f2e3c5bece69bc69f7074819">SVF::Options::ClusterMethod</a></div><div class="ttdeci">static const llvm::cl::opt< enum hclust_fast_methods > ClusterMethod</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00055">Options.h:55</a></div></div>
|
|
249
249
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a14a4c5124f2fd03ca3d898e2acd54160"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVF::SVFUtil::hclustMethodToString</a></div><div class="ttdeci">std::string hclustMethodToString(hclust_fast_methods method)</div><div class="ttdoc">Returns a string representation of a hclust method. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00367">SVFUtil.cpp:367</a></div></div>
|
|
250
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a3556bdda6725b72d0ca88364daeae32e"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3556bdda6725b72d0ca88364daeae32e">SVF::NodeIDAllocator::Clusterer::BestCandidate</a></div><div class="ttdeci">static const std::string BestCandidate</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
250
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a3556bdda6725b72d0ca88364daeae32e"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3556bdda6725b72d0ca88364daeae32e">SVF::NodeIDAllocator::Clusterer::BestCandidate</a></div><div class="ttdeci">static const std::string BestCandidate</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00129">NodeIDAllocator.h:129</a></div></div>
|
|
251
251
|
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00067">fastcluster.h:67</a></div></div>
|
|
252
252
|
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00176">SVFBasicTypes.h:176</a></div></div>
|
|
253
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a172d72ae4ae45fa2baf2f20ff2b499dc"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">SVF::NodeIDAllocator::Clusterer::LargestRegion</a></div><div class="ttdeci">static const std::string LargestRegion</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
254
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_adf415d244ef1fafe7a7de3c360553c0f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#adf415d244ef1fafe7a7de3c360553c0f">SVF::NodeIDAllocator::Clusterer::getDistanceMatrix</a></div><div class="ttdeci">static double * getDistanceMatrix(const std::vector< std::pair< const PointsTo *, unsigned >> pointsToSets, const size_t numObjects, const Map< NodeID, unsigned > &nodeMap, double &distanceMatrixTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
253
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a172d72ae4ae45fa2baf2f20ff2b499dc"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">SVF::NodeIDAllocator::Clusterer::LargestRegion</a></div><div class="ttdeci">static const std::string LargestRegion</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00128">NodeIDAllocator.h:128</a></div></div>
|
|
254
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_adf415d244ef1fafe7a7de3c360553c0f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#adf415d244ef1fafe7a7de3c360553c0f">SVF::NodeIDAllocator::Clusterer::getDistanceMatrix</a></div><div class="ttdeci">static double * getDistanceMatrix(const std::vector< std::pair< const PointsTo *, unsigned >> pointsToSets, const size_t numObjects, const Map< NodeID, unsigned > &nodeMap, double &distanceMatrixTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00432">NodeIDAllocator.cpp:432</a></div></div>
|
|
255
255
|
<div class="ttc" id="classSVF_1_1Options_html_ab6115b28808af348e1f6a6b58b4cd84f"><div class="ttname"><a href="classSVF_1_1Options.html#ab6115b28808af348e1f6a6b58b4cd84f">SVF::Options::RegionedClustering</a></div><div class="ttdeci">static const llvm::cl::opt< bool > RegionedClustering</div><div class="ttdoc">Cluster partitions separately. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00058">Options.h:58</a></div></div>
|
|
256
256
|
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00071">fastcluster.h:71</a></div></div>
|
|
257
257
|
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a2bd3ca30fc9669d9a0327544bdb4557b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">SVF::NodeIDAllocator::get</a></div><div class="ttdeci">static NodeIDAllocator * get(void)</div><div class="ttdoc">Return (singleton) allocator. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00025">NodeIDAllocator.cpp:25</a></div></div>
|
|
258
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a09d2dbb2faab0a0e03bfa353534116a8"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">SVF::NodeIDAllocator::Clusterer::DistanceMatrixTime</a></div><div class="ttdeci">static const std::string DistanceMatrixTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
259
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afef85f0ecacd681357b3945f97d52964"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">SVF::NodeIDAllocator::Clusterer::TotalTime</a></div><div class="ttdeci">static const std::string TotalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
260
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1d98862e19affdd08740f85490d0d856"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">SVF::NodeIDAllocator::Clusterer::EvalTime</a></div><div class="ttdeci">static const std::string EvalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
261
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1bf9461c717e8dabaee6a57f3d76d61f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">SVF::NodeIDAllocator::Clusterer::NumNonTrivialRegionObjects</a></div><div class="ttdeci">static const std::string NumNonTrivialRegionObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
262
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac5fe44f10cdbca9754444943a0f5c3c1"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">SVF::NodeIDAllocator::Clusterer::NumRegions</a></div><div class="ttdeci">static const std::string NumRegions</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
258
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a09d2dbb2faab0a0e03bfa353534116a8"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">SVF::NodeIDAllocator::Clusterer::DistanceMatrixTime</a></div><div class="ttdeci">static const std::string DistanceMatrixTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00116">NodeIDAllocator.h:116</a></div></div>
|
|
259
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afef85f0ecacd681357b3945f97d52964"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">SVF::NodeIDAllocator::Clusterer::TotalTime</a></div><div class="ttdeci">static const std::string TotalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00120">NodeIDAllocator.h:120</a></div></div>
|
|
260
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1d98862e19affdd08740f85490d0d856"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">SVF::NodeIDAllocator::Clusterer::EvalTime</a></div><div class="ttdeci">static const std::string EvalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00119">NodeIDAllocator.h:119</a></div></div>
|
|
261
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1bf9461c717e8dabaee6a57f3d76d61f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">SVF::NodeIDAllocator::Clusterer::NumNonTrivialRegionObjects</a></div><div class="ttdeci">static const std::string NumNonTrivialRegionObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00130">NodeIDAllocator.h:130</a></div></div>
|
|
262
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac5fe44f10cdbca9754444943a0f5c3c1"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">SVF::NodeIDAllocator::Clusterer::NumRegions</a></div><div class="ttdeci">static const std::string NumRegions</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00126">NodeIDAllocator.h:126</a></div></div>
|
|
263
263
|
<div class="ttc" id="SVFBasicTypes_8h_html_ab8ca0fd9d0caa6817d305cae0f1cf022"><div class="ttname"><a href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a></div><div class="ttdeci">#define NATIVE_INT_SIZE</div><div class="ttdoc">Size of native integer that we&#39;ll use for bit vectors, in bits. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00180">SVFBasicTypes.h:180</a></div></div>
|
|
264
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_abd44e3b07b0482bacf6b1a080fe650c6"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">SVF::NodeIDAllocator::Clusterer::traverseDendrogram</a></div><div class="ttdeci">static void traverseDendrogram(std::vector< NodeID > &nodeMap, const int *dendrogram, const size_t numObjects, unsigned &allocCounter, Set< int > &visited, const int index, const std::vector< NodeID > &regionNodeMap)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
264
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_abd44e3b07b0482bacf6b1a080fe650c6"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">SVF::NodeIDAllocator::Clusterer::traverseDendrogram</a></div><div class="ttdeci">static void traverseDendrogram(std::vector< NodeID > &nodeMap, const int *dendrogram, const size_t numObjects, unsigned &allocCounter, Set< int > &visited, const int index, const std::vector< NodeID > &regionNodeMap)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00503">NodeIDAllocator.cpp:503</a></div></div>
|
|
265
265
|
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
266
266
|
</div><!-- fragment -->
|
|
267
267
|
</div>
|
|
@@ -307,8 +307,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
307
307
|
</div><div class="memdoc">
|
|
308
308
|
<p>Returns an index into a condensed matrix (upper triangle, excluding diagonals) corresponding to an nxn matrix. </p>
|
|
309
309
|
|
|
310
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
311
|
-
<div class="fragment"><div class="line"><a name="
|
|
310
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00413">413</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
311
|
+
<div class="fragment"><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="comment">// From https://stackoverflow.com/a/14839010</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">return</span> n*(n-1)/2 - (n-i)*(n-i-1)/2 + j - i - 1;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  }</div></div><!-- fragment -->
|
|
312
312
|
</div>
|
|
313
313
|
</div>
|
|
314
314
|
<a id="a3f86e733cc075180e9682887c554b8fa"></a>
|
|
@@ -357,20 +357,20 @@ Static Private Attributes</h2></td></tr>
|
|
|
357
357
|
</table>
|
|
358
358
|
</div><div class="memdoc">
|
|
359
359
|
|
|
360
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
361
|
-
<div class="fragment"><div class="line"><a name="
|
|
362
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_acbbc5c04c79846fe1cc46a3bd5a65aba"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">SVF::NodeIDAllocator::Clusterer::evaluate</a></div><div class="ttdeci">static void evaluate(const std::vector< NodeID > &nodeMap, const Map< PointsTo, unsigned > pointsToSets, Map< std::string, std::string > &stats, bool accountForOcc)</div><div class="ttdoc">Fills in *NumWords statistics in stats.. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
360
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00652">652</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
361
|
+
<div class="fragment"><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>  <span class="comment">// In case we're not comparing anything, set to first "candidate".</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  std::pair<hclust_fast_methods, std::vector<NodeID>> bestMapping = candidates[0];</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="comment">// Number of bits required for the best candidate.</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keywordtype">size_t</span> bestWords = std::numeric_limits<size_t>::max();</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">if</span> (evalSubtitle != <span class="stringliteral">""</span> || <a class="code" href="classSVF_1_1Options.html#a8e0538a7f2e3c5bece69bc69f7074819">Options::ClusterMethod</a> == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a>)</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a>, std::vector<NodeID>> &candidate : candidates)</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  Map<std::string, std::string> candidateStats;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a> candidateMethod = candidate.first;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  std::string candidateMethodName = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVFUtil::hclustMethodToString</a>(candidateMethod);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  std::vector<NodeID> candidateMapping = candidate.second;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="comment">// TODO: parameterise final arg.</span></div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">evaluate</a>(candidateMapping, pointsToSets, candidateStats, <span class="keyword">true</span>);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  evalTime += (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">printStats</a>(evalSubtitle + <span class="stringliteral">": candidate "</span> + candidateMethodName, candidateStats);</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordtype">size_t</span> candidateWords = 0;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#abc02c7dc5e6cb3613856e0f774c6d304">Options::PtType</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">PointsTo::SBV</a>) candidateWords = std::stoull(candidateStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">NewSbvNumWords</a>]);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#abc02c7dc5e6cb3613856e0f774c6d304">Options::PtType</a> == <a class="code" href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">PointsTo::CBV</a>) candidateWords = std::stoull(candidateStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">NewBvNumWords</a>]);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"Clusterer::cluster: unsupported BV type for clustering."</span>);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">if</span> (candidateWords < bestWords)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  bestWords = candidateWords;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  bestMapping = candidate;</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>  }</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"> 689</span>  <span class="keywordflow">return</span> bestMapping;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  }</div><div class="ttc" id="classSVF_1_1PointsTo_html_a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SVF::PointsTo::SBV</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00032">PointsTo.h:32</a></div></div>
|
|
362
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_acbbc5c04c79846fe1cc46a3bd5a65aba"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">SVF::NodeIDAllocator::Clusterer::evaluate</a></div><div class="ttdeci">static void evaluate(const std::vector< NodeID > &nodeMap, const Map< PointsTo, unsigned > pointsToSets, Map< std::string, std::string > &stats, bool accountForOcc)</div><div class="ttdoc">Fills in *NumWords statistics in stats.. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00574">NodeIDAllocator.cpp:574</a></div></div>
|
|
363
363
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
364
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a779446e2fe92518401f1732fb809f066"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">SVF::NodeIDAllocator::Clusterer::NewSbvNumWords</a></div><div class="ttdeci">static const std::string NewSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
364
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a779446e2fe92518401f1732fb809f066"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">SVF::NodeIDAllocator::Clusterer::NewSbvNumWords</a></div><div class="ttdeci">static const std::string NewSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00125">NodeIDAllocator.h:125</a></div></div>
|
|
365
365
|
<div class="ttc" id="classSVF_1_1Options_html_abc02c7dc5e6cb3613856e0f774c6d304"><div class="ttname"><a href="classSVF_1_1Options.html#abc02c7dc5e6cb3613856e0f774c6d304">SVF::Options::PtType</a></div><div class="ttdeci">static const llvm::cl::opt< PointsTo::Type > PtType</div><div class="ttdoc">Type of points-to set to use for all analyses. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00049">Options.h:49</a></div></div>
|
|
366
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac10cbda6a84ce890c9946a5ff35800b7"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">SVF::NodeIDAllocator::Clusterer::printStats</a></div><div class="ttdeci">static void printStats(std::string title, Map< std::string, std::string > &stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
366
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac10cbda6a84ce890c9946a5ff35800b7"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">SVF::NodeIDAllocator::Clusterer::printStats</a></div><div class="ttdeci">static void printStats(std::string title, Map< std::string, std::string > &stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00692">NodeIDAllocator.cpp:692</a></div></div>
|
|
367
367
|
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00075">fastcluster.h:75</a></div></div>
|
|
368
368
|
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dd"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a></div><div class="ttdeci">hclust_fast_methods</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00065">fastcluster.h:65</a></div></div>
|
|
369
369
|
<div class="ttc" id="classSVF_1_1Options_html_a8e0538a7f2e3c5bece69bc69f7074819"><div class="ttname"><a href="classSVF_1_1Options.html#a8e0538a7f2e3c5bece69bc69f7074819">SVF::Options::ClusterMethod</a></div><div class="ttdeci">static const llvm::cl::opt< enum hclust_fast_methods > ClusterMethod</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00055">Options.h:55</a></div></div>
|
|
370
370
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a14a4c5124f2fd03ca3d898e2acd54160"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVF::SVFUtil::hclustMethodToString</a></div><div class="ttdeci">std::string hclustMethodToString(hclust_fast_methods method)</div><div class="ttdoc">Returns a string representation of a hclust method. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00367">SVFUtil.cpp:367</a></div></div>
|
|
371
371
|
<div class="ttc" id="classSVF_1_1PointsTo_html_a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">SVF::PointsTo::CBV</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00033">PointsTo.h:33</a></div></div>
|
|
372
372
|
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00176">SVFBasicTypes.h:176</a></div></div>
|
|
373
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af3fe4b4098898ee38928c9db30ea0fe9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">SVF::NodeIDAllocator::Clusterer::NewBvNumWords</a></div><div class="ttdeci">static const std::string NewBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
373
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af3fe4b4098898ee38928c9db30ea0fe9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">SVF::NodeIDAllocator::Clusterer::NewBvNumWords</a></div><div class="ttdeci">static const std::string NewBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00124">NodeIDAllocator.h:124</a></div></div>
|
|
374
374
|
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
375
375
|
</div><!-- fragment -->
|
|
376
376
|
</div>
|
|
@@ -423,14 +423,14 @@ Static Private Attributes</h2></td></tr>
|
|
|
423
423
|
|
|
424
424
|
<p>Fills in *NumWords statistics in stats.. </p>
|
|
425
425
|
|
|
426
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
427
|
-
<div class="fragment"><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalTheoretical = 0;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalOriginalSbv = 0;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalOriginalBv = 0;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalNewSbv = 0;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalNewBv = 0;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Map<PointsTo, unsigned>::value_type &ptsOcc : pointsToSets)</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keyword">const</span> PointsTo &pts = ptsOcc.first;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptsOcc.second;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">if</span> (pts.count() == 0) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> theoretical = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(pts) / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">if</span> (accountForOcc) theoretical *= occ;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="comment">// Check number of words for original SBV.</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  Set<unsigned> words;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="comment">// TODO: nasty hardcoding.</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts) words.insert(o / 128);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> originalSbv = words.size() * 2;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">if</span> (accountForOcc) originalSbv *= occ;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="comment">// Check number of words for original BV.</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> min = UINT_MAX;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> max = 0;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">if</span> (o < min) min = o;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">if</span> (o > max) max = o;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  words.clear();</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> b = min; b <= max; ++b)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  words.insert(b / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</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"> 599</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> originalBv = words.size();</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">if</span> (accountForOcc) originalBv *= occ;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="comment">// Check number of words for new SBV.</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  words.clear();</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="comment">// TODO: nasty hardcoding.</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts) words.insert(nodeMap[o] / 128);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> newSbv = words.size() * 2;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordflow">if</span> (accountForOcc) newSbv *= occ;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="comment">// Check number of words for new BV.</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  min = UINT_MAX;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  max = 0;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  {</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> mappedO = nodeMap[o];</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">if</span> (mappedO < min) min = mappedO;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="keywordflow">if</span> (mappedO > max) max = mappedO;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</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>  words.clear();</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="comment">// No nodeMap[b] because min and max and from nodeMap.</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> b = min; b <= max; ++b) words.insert(b / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> newBv = words.size();</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">if</span> (accountForOcc) newBv *= occ;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  totalTheoretical += theoretical;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  totalOriginalSbv += originalSbv;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  totalOriginalBv += originalBv;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  totalNewSbv += newSbv;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  totalNewBv += newBv;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  }</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">TheoreticalNumWords</a>] = std::to_string(totalTheoretical);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">OriginalSbvNumWords</a>] = std::to_string(totalOriginalSbv);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">OriginalBvNumWords</a>] = std::to_string(totalOriginalBv);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">NewSbvNumWords</a>] = std::to_string(totalNewSbv);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">NewBvNumWords</a>] = std::to_string(totalNewBv);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
428
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a9aea96839c51ac1e2cbf4813174bb21c"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">SVF::NodeIDAllocator::Clusterer::requiredBits</a></div><div class="ttdeci">static unsigned requiredBits(const PointsTo &pts)</div><div class="ttdoc">Returns the minimum number of bits required to represent pts in a perfect world. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
429
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af2786eae11ee13845da336ad23bc97e9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">SVF::NodeIDAllocator::Clusterer::OriginalBvNumWords</a></div><div class="ttdeci">static const std::string OriginalBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
430
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a779446e2fe92518401f1732fb809f066"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">SVF::NodeIDAllocator::Clusterer::NewSbvNumWords</a></div><div class="ttdeci">static const std::string NewSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
431
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a2a70b98363303cb33d96732f44b4c5c3"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">SVF::NodeIDAllocator::Clusterer::TheoreticalNumWords</a></div><div class="ttdeci">static const std::string TheoreticalNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
432
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a639b887e30115c2a6cd108c65f18fcc1"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">SVF::NodeIDAllocator::Clusterer::OriginalSbvNumWords</a></div><div class="ttdeci">static const std::string OriginalSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
433
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af3fe4b4098898ee38928c9db30ea0fe9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">SVF::NodeIDAllocator::Clusterer::NewBvNumWords</a></div><div class="ttdeci">static const std::string NewBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
426
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00574">574</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
427
|
+
<div class="fragment"><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalTheoretical = 0;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalOriginalSbv = 0;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalOriginalBv = 0;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalNewSbv = 0;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalNewBv = 0;</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="keywordflow">for</span> (<span class="keyword">const</span> Map<PointsTo, unsigned>::value_type &ptsOcc : pointsToSets)</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keyword">const</span> PointsTo &pts = ptsOcc.first;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptsOcc.second;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">if</span> (pts.count() == 0) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span> </div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> theoretical = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(pts) / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">if</span> (accountForOcc) theoretical *= occ;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="comment">// Check number of words for original SBV.</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  Set<unsigned> words;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="comment">// TODO: nasty hardcoding.</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts) words.insert(o / 128);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> originalSbv = words.size() * 2;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">if</span> (accountForOcc) originalSbv *= occ;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span> </div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="comment">// Check number of words for original BV.</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> min = UINT_MAX;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> max = 0;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">if</span> (o < min) min = o;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">if</span> (o > max) max = o;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  }</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  words.clear();</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> b = min; b <= max; ++b)</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  {</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  words.insert(b / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  }</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> originalBv = words.size();</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">if</span> (accountForOcc) originalBv *= occ;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="comment">// Check number of words for new SBV.</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  words.clear();</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="comment">// TODO: nasty hardcoding.</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts) words.insert(nodeMap[o] / 128);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> newSbv = words.size() * 2;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordflow">if</span> (accountForOcc) newSbv *= occ;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="comment">// Check number of words for new BV.</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  min = UINT_MAX;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  max = 0;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> mappedO = nodeMap[o];</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keywordflow">if</span> (mappedO < min) min = mappedO;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (mappedO > max) max = mappedO;</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> </div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  words.clear();</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="comment">// No nodeMap[b] because min and max and from nodeMap.</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> b = min; b <= max; ++b) words.insert(b / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> newBv = words.size();</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">if</span> (accountForOcc) newBv *= occ;</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>  totalTheoretical += theoretical;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  totalOriginalSbv += originalSbv;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  totalOriginalBv += originalBv;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  totalNewSbv += newSbv;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  totalNewBv += newBv;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  }</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">TheoreticalNumWords</a>] = std::to_string(totalTheoretical);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">OriginalSbvNumWords</a>] = std::to_string(totalOriginalSbv);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">OriginalBvNumWords</a>] = std::to_string(totalOriginalBv);</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">NewSbvNumWords</a>] = std::to_string(totalNewSbv);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">NewBvNumWords</a>] = std::to_string(totalNewBv);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
428
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a9aea96839c51ac1e2cbf4813174bb21c"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">SVF::NodeIDAllocator::Clusterer::requiredBits</a></div><div class="ttdeci">static unsigned requiredBits(const PointsTo &pts)</div><div class="ttdoc">Returns the minimum number of bits required to represent pts in a perfect world. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00419">NodeIDAllocator.cpp:419</a></div></div>
|
|
429
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af2786eae11ee13845da336ad23bc97e9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">SVF::NodeIDAllocator::Clusterer::OriginalBvNumWords</a></div><div class="ttdeci">static const std::string OriginalBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00122">NodeIDAllocator.h:122</a></div></div>
|
|
430
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a779446e2fe92518401f1732fb809f066"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">SVF::NodeIDAllocator::Clusterer::NewSbvNumWords</a></div><div class="ttdeci">static const std::string NewSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00125">NodeIDAllocator.h:125</a></div></div>
|
|
431
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a2a70b98363303cb33d96732f44b4c5c3"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">SVF::NodeIDAllocator::Clusterer::TheoreticalNumWords</a></div><div class="ttdeci">static const std::string TheoreticalNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00121">NodeIDAllocator.h:121</a></div></div>
|
|
432
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a639b887e30115c2a6cd108c65f18fcc1"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">SVF::NodeIDAllocator::Clusterer::OriginalSbvNumWords</a></div><div class="ttdeci">static const std::string OriginalSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00123">NodeIDAllocator.h:123</a></div></div>
|
|
433
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af3fe4b4098898ee38928c9db30ea0fe9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">SVF::NodeIDAllocator::Clusterer::NewBvNumWords</a></div><div class="ttdeci">static const std::string NewBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00124">NodeIDAllocator.h:124</a></div></div>
|
|
434
434
|
<div class="ttc" id="SVFBasicTypes_8h_html_ab8ca0fd9d0caa6817d305cae0f1cf022"><div class="ttname"><a href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a></div><div class="ttdeci">#define NATIVE_INT_SIZE</div><div class="ttdoc">Size of native integer that we&#39;ll use for bit vectors, in bits. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00180">SVFBasicTypes.h:180</a></div></div>
|
|
435
435
|
<div class="ttc" id="namespaceSVF_html_a366625858f450a1ea5f985a3c83e0f14"><div class="ttname"><a href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">SVF::u64_t</a></div><div class="ttdeci">unsigned long long u64_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00076">SVFBasicTypes.h:76</a></div></div>
|
|
436
436
|
</div><!-- fragment -->
|
|
@@ -483,13 +483,13 @@ Static Private Attributes</h2></td></tr>
|
|
|
483
483
|
</div><div class="memdoc">
|
|
484
484
|
<p>Builds the upper triangle of the distance matrix, as an array of length (numObjects * (numObjects - 1)) / 2, as required by fastcluster. Responsibility of caller to <code>delete</code>. </p>
|
|
485
485
|
|
|
486
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
487
|
-
<div class="fragment"><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordtype">size_t</span> condensedSize = (<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> * (<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> - 1)) / 2;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordtype">double</span> *distMatrix = <span class="keyword">new</span> <span class="keywordtype">double</span>[condensedSize];</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < condensedSize; ++i) distMatrix[i] = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> * <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>;</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>  <span class="comment">// TODO: maybe use machine epsilon?</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="comment">// For reducing distance due to extra occurrences.</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="comment">// Can differentiate ~9999 occurrences.</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordtype">double</span> occurrenceEpsilon = 0.0001;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<const PointsTo *, unsigned> &ptsOcc : pointsToSets)</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keyword">const</span> PointsTo *pts = ptsOcc.first;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(pts != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptsOcc.second;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="comment">// Distance between each element of pts.</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordtype">unsigned</span> distance = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(*pts) / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="comment">// Use a vector so we can index into pts.</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  std::vector<NodeID> ptsVec;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : *pts) ptsVec.push_back(o);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < ptsVec.size(); ++i)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oi = ptsVec[i];</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keyword">const</span> Map<NodeID, unsigned>::const_iterator moi = nodeMap.find(oi);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(moi != nodeMap.end());</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = i + 1; j < ptsVec.size(); ++j)</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oj = ptsVec[j];</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keyword">const</span> Map<NodeID, unsigned>::const_iterator moj = nodeMap.find(oj);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(moj != nodeMap.end());</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordtype">double</span> &existingDistance = distMatrix[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac8c209af1d177cbc8fbbfe4526fe8ce2">condensedIndex</a>(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, moi->second, moj->second)];</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="comment">// Subtract extra occurrenceEpsilon to make upcoming logic simpler.</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="comment">// When existingDistance is never whole, it is always between two distances.</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keywordflow">if</span> (distance < existingDistance) existingDistance = distance - occurrenceEpsilon;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">if</span> (distance == std::ceil(existingDistance))</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="comment">// We have something like distance == x, existingDistance == x - e, for some e < 1</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="comment">// (potentially even set during this iteration).</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// So, the new distance is an occurrence the existingDistance being tracked, it just</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// had some reductions because of multiple occurences.</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// If there is not room within this distance to reduce more (increase priority),</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// just ignore it. TODO: maybe warn?</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (existingDistance - occ * occurrenceEpsilon > std::floor(existingDistance))</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>  existingDistance -= occ * occurrenceEpsilon;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="comment">// Reached minimum.</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  existingDistance = std::floor(existingDistance) + occurrenceEpsilon;</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>  }</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>  }</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>  <span class="keyword">const</span> <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  distanceMatrixTime += (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">return</span> distMatrix;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
488
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a9aea96839c51ac1e2cbf4813174bb21c"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">SVF::NodeIDAllocator::Clusterer::requiredBits</a></div><div class="ttdeci">static unsigned requiredBits(const PointsTo &pts)</div><div class="ttdoc">Returns the minimum number of bits required to represent pts in a perfect world. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
486
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00432">432</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
487
|
+
<div class="fragment"><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordtype">size_t</span> condensedSize = (<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> * (<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> - 1)) / 2;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordtype">double</span> *distMatrix = <span class="keyword">new</span> <span class="keywordtype">double</span>[condensedSize];</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < condensedSize; ++i) distMatrix[i] = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> * <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>;</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>  <span class="comment">// TODO: maybe use machine epsilon?</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="comment">// For reducing distance due to extra occurrences.</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="comment">// Can differentiate ~9999 occurrences.</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordtype">double</span> occurrenceEpsilon = 0.0001;</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>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<const PointsTo *, unsigned> &ptsOcc : pointsToSets)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">const</span> PointsTo *pts = ptsOcc.first;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(pts != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptsOcc.second;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="comment">// Distance between each element of pts.</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordtype">unsigned</span> distance = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(*pts) / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="comment">// Use a vector so we can index into pts.</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  std::vector<NodeID> ptsVec;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : *pts) ptsVec.push_back(o);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < ptsVec.size(); ++i)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oi = ptsVec[i];</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keyword">const</span> Map<NodeID, unsigned>::const_iterator moi = nodeMap.find(oi);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(moi != nodeMap.end());</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = i + 1; j < ptsVec.size(); ++j)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oj = ptsVec[j];</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keyword">const</span> Map<NodeID, unsigned>::const_iterator moj = nodeMap.find(oj);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(moj != nodeMap.end());</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordtype">double</span> &existingDistance = distMatrix[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac8c209af1d177cbc8fbbfe4526fe8ce2">condensedIndex</a>(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, moi->second, moj->second)];</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// Subtract extra occurrenceEpsilon to make upcoming logic simpler.</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// When existingDistance is never whole, it is always between two distances.</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">if</span> (distance < existingDistance) existingDistance = distance - occurrenceEpsilon;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keywordflow">if</span> (distance == std::ceil(existingDistance))</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="comment">// We have something like distance == x, existingDistance == x - e, for some e < 1</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="comment">// (potentially even set during this iteration).</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="comment">// So, the new distance is an occurrence the existingDistance being tracked, it just</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="comment">// had some reductions because of multiple occurences.</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="comment">// If there is not room within this distance to reduce more (increase priority),</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="comment">// just ignore it. TODO: maybe warn?</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">if</span> (existingDistance - occ * occurrenceEpsilon > std::floor(existingDistance))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  existingDistance -= occ * occurrenceEpsilon;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="comment">// Reached minimum.</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  existingDistance = std::floor(existingDistance) + occurrenceEpsilon;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  }</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"> 496</span> </div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">PTAStat::getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  distanceMatrixTime += (clkEnd - clkStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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>  <span class="keywordflow">return</span> distMatrix;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
488
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a9aea96839c51ac1e2cbf4813174bb21c"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">SVF::NodeIDAllocator::Clusterer::requiredBits</a></div><div class="ttdeci">static unsigned requiredBits(const PointsTo &pts)</div><div class="ttdoc">Returns the minimum number of bits required to represent pts in a perfect world. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00419">NodeIDAllocator.cpp:419</a></div></div>
|
|
489
489
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
490
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a190c729a3f3f622f82cee4917946b50f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">SVF::NodeIDAllocator::numObjects</a></div><div class="ttdeci">NodeID numObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
490
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a190c729a3f3f622f82cee4917946b50f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">SVF::NodeIDAllocator::numObjects</a></div><div class="ttdeci">NodeID numObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00087">NodeIDAllocator.h:87</a></div></div>
|
|
491
491
|
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00176">SVFBasicTypes.h:176</a></div></div>
|
|
492
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac8c209af1d177cbc8fbbfe4526fe8ce2"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac8c209af1d177cbc8fbbfe4526fe8ce2">SVF::NodeIDAllocator::Clusterer::condensedIndex</a></div><div class="ttdeci">static size_t condensedIndex(size_t n, size_t i, size_t j)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
492
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac8c209af1d177cbc8fbbfe4526fe8ce2"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac8c209af1d177cbc8fbbfe4526fe8ce2">SVF::NodeIDAllocator::Clusterer::condensedIndex</a></div><div class="ttdeci">static size_t condensedIndex(size_t n, size_t i, size_t j)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00413">NodeIDAllocator.cpp:413</a></div></div>
|
|
493
493
|
<div class="ttc" id="SVFBasicTypes_8h_html_ab8ca0fd9d0caa6817d305cae0f1cf022"><div class="ttname"><a href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a></div><div class="ttdeci">#define NATIVE_INT_SIZE</div><div class="ttdoc">Size of native integer that we&#39;ll use for bit vectors, in bits. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00180">SVFBasicTypes.h:180</a></div></div>
|
|
494
494
|
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
495
495
|
</div><!-- fragment -->
|
|
@@ -519,8 +519,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
519
519
|
</table>
|
|
520
520
|
</div><div class="memdoc">
|
|
521
521
|
|
|
522
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
523
|
-
<div class="fragment"><div class="line"><a name="
|
|
522
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00399">399</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
523
|
+
<div class="fragment"><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="comment">// nodeMapping.size() may not be big enough because we leave some gaps, but it's a start.</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  std::vector<NodeID> reverseNodeMapping(nodeMapping.size(), UINT_MAX);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < nodeMapping.size(); ++i)</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  {</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> mapsTo = nodeMapping.at(i);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">if</span> (mapsTo >= reverseNodeMapping.size()) reverseNodeMapping.resize(mapsTo + 1, UINT_MAX);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  reverseNodeMapping.at(mapsTo) = i;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">return</span> reverseNodeMapping;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
524
524
|
</div><!-- fragment -->
|
|
525
525
|
</div>
|
|
526
526
|
</div>
|
|
@@ -559,24 +559,24 @@ Static Private Attributes</h2></td></tr>
|
|
|
559
559
|
</div><div class="memdoc">
|
|
560
560
|
<p>Prints statistics to <a class="el" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f" title="Overwrite llvm::outs() ">SVFUtil::outs()</a>. TODO: make stats const. </p>
|
|
561
561
|
|
|
562
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
563
|
-
<div class="fragment"><div class="line"><a name="
|
|
564
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a67ab9cffacc1584b2e7bae5d1b08c541"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">SVF::NodeIDAllocator::Clusterer::DendrogramTraversalTime</a></div><div class="ttdeci">static const std::string DendrogramTraversalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
565
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af2786eae11ee13845da336ad23bc97e9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">SVF::NodeIDAllocator::Clusterer::OriginalBvNumWords</a></div><div class="ttdeci">static const std::string OriginalBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
566
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a779446e2fe92518401f1732fb809f066"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">SVF::NodeIDAllocator::Clusterer::NewSbvNumWords</a></div><div class="ttdeci">static const std::string NewSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
567
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afa74c5ccd22bebe0b76db33066d8b498"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">SVF::NodeIDAllocator::Clusterer::NumObjects</a></div><div class="ttdeci">static const std::string NumObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
568
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a2a70b98363303cb33d96732f44b4c5c3"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">SVF::NodeIDAllocator::Clusterer::TheoreticalNumWords</a></div><div class="ttdeci">static const std::string TheoreticalNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
569
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ad5f733cad8a103a64e80270acb67567a"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">SVF::NodeIDAllocator::Clusterer::RegioningTime</a></div><div class="ttdeci">static const std::string RegioningTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
570
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ae78d2b60035350c634f6f58d7a043c22"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">SVF::NodeIDAllocator::Clusterer::FastClusterTime</a></div><div class="ttdeci">static const std::string FastClusterTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
571
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a639b887e30115c2a6cd108c65f18fcc1"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">SVF::NodeIDAllocator::Clusterer::OriginalSbvNumWords</a></div><div class="ttdeci">static const std::string OriginalSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
572
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a3556bdda6725b72d0ca88364daeae32e"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3556bdda6725b72d0ca88364daeae32e">SVF::NodeIDAllocator::Clusterer::BestCandidate</a></div><div class="ttdeci">static const std::string BestCandidate</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
573
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a172d72ae4ae45fa2baf2f20ff2b499dc"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">SVF::NodeIDAllocator::Clusterer::LargestRegion</a></div><div class="ttdeci">static const std::string LargestRegion</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
574
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a09d2dbb2faab0a0e03bfa353534116a8"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">SVF::NodeIDAllocator::Clusterer::DistanceMatrixTime</a></div><div class="ttdeci">static const std::string DistanceMatrixTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
575
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afef85f0ecacd681357b3945f97d52964"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">SVF::NodeIDAllocator::Clusterer::TotalTime</a></div><div class="ttdeci">static const std::string TotalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
576
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1d98862e19affdd08740f85490d0d856"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">SVF::NodeIDAllocator::Clusterer::EvalTime</a></div><div class="ttdeci">static const std::string EvalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
577
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1bf9461c717e8dabaee6a57f3d76d61f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">SVF::NodeIDAllocator::Clusterer::NumNonTrivialRegionObjects</a></div><div class="ttdeci">static const std::string NumNonTrivialRegionObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
578
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af3fe4b4098898ee38928c9db30ea0fe9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">SVF::NodeIDAllocator::Clusterer::NewBvNumWords</a></div><div class="ttdeci">static const std::string NewBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
579
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac5fe44f10cdbca9754444943a0f5c3c1"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">SVF::NodeIDAllocator::Clusterer::NumRegions</a></div><div class="ttdeci">static const std::string NumRegions</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
562
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00692">692</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
563
|
+
<div class="fragment"><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="comment">// When not in order, it is too hard to compare original/new SBV/BV words, so this array forces an order.</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keyword">const</span> <span class="keyword">static</span> std::array<std::string, 17> statKeys =</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  { <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">NumObjects</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">TheoreticalNumWords</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">OriginalSbvNumWords</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">OriginalBvNumWords</a>,</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">NewSbvNumWords</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">NewBvNumWords</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">NumRegions</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad7cb36a1f0f67864fb8290e9dfd7b639">NumGtIntRegions</a>,</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">NumNonTrivialRegionObjects</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">LargestRegion</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">RegioningTime</a>,</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">DistanceMatrixTime</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">FastClusterTime</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">DendrogramTraversalTime</a>,</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">EvalTime</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">TotalTime</a>, <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3556bdda6725b72d0ca88364daeae32e">BestCandidate</a> };</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> fieldWidth = 20;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  std::cout.flags(std::ios::left);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  std::cout << <span class="stringliteral">"****Clusterer Statistics: "</span> << subtitle << <span class="stringliteral">"****\n"</span>;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string &statKey : statKeys)</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>  Map<std::string, std::string>::const_iterator stat = stats.find(statKey);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keywordflow">if</span> (stat != stats.end())</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>  std::cout << std::setw(fieldWidth) << statKey << <span class="stringliteral">" "</span> << stat->second << <span class="stringliteral">"\n"</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"> 712</span>  }</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> </div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  std::cout.flush();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  }</div><div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ad7cb36a1f0f67864fb8290e9dfd7b639"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad7cb36a1f0f67864fb8290e9dfd7b639">SVF::NodeIDAllocator::Clusterer::NumGtIntRegions</a></div><div class="ttdeci">static const std::string NumGtIntRegions</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00127">NodeIDAllocator.h:127</a></div></div>
|
|
564
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a67ab9cffacc1584b2e7bae5d1b08c541"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">SVF::NodeIDAllocator::Clusterer::DendrogramTraversalTime</a></div><div class="ttdeci">static const std::string DendrogramTraversalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00118">NodeIDAllocator.h:118</a></div></div>
|
|
565
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af2786eae11ee13845da336ad23bc97e9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">SVF::NodeIDAllocator::Clusterer::OriginalBvNumWords</a></div><div class="ttdeci">static const std::string OriginalBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00122">NodeIDAllocator.h:122</a></div></div>
|
|
566
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a779446e2fe92518401f1732fb809f066"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">SVF::NodeIDAllocator::Clusterer::NewSbvNumWords</a></div><div class="ttdeci">static const std::string NewSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00125">NodeIDAllocator.h:125</a></div></div>
|
|
567
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afa74c5ccd22bebe0b76db33066d8b498"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">SVF::NodeIDAllocator::Clusterer::NumObjects</a></div><div class="ttdeci">static const std::string NumObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00114">NodeIDAllocator.h:114</a></div></div>
|
|
568
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a2a70b98363303cb33d96732f44b4c5c3"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">SVF::NodeIDAllocator::Clusterer::TheoreticalNumWords</a></div><div class="ttdeci">static const std::string TheoreticalNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00121">NodeIDAllocator.h:121</a></div></div>
|
|
569
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ad5f733cad8a103a64e80270acb67567a"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">SVF::NodeIDAllocator::Clusterer::RegioningTime</a></div><div class="ttdeci">static const std::string RegioningTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00115">NodeIDAllocator.h:115</a></div></div>
|
|
570
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ae78d2b60035350c634f6f58d7a043c22"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">SVF::NodeIDAllocator::Clusterer::FastClusterTime</a></div><div class="ttdeci">static const std::string FastClusterTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00117">NodeIDAllocator.h:117</a></div></div>
|
|
571
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a639b887e30115c2a6cd108c65f18fcc1"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">SVF::NodeIDAllocator::Clusterer::OriginalSbvNumWords</a></div><div class="ttdeci">static const std::string OriginalSbvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00123">NodeIDAllocator.h:123</a></div></div>
|
|
572
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a3556bdda6725b72d0ca88364daeae32e"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3556bdda6725b72d0ca88364daeae32e">SVF::NodeIDAllocator::Clusterer::BestCandidate</a></div><div class="ttdeci">static const std::string BestCandidate</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00129">NodeIDAllocator.h:129</a></div></div>
|
|
573
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a172d72ae4ae45fa2baf2f20ff2b499dc"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">SVF::NodeIDAllocator::Clusterer::LargestRegion</a></div><div class="ttdeci">static const std::string LargestRegion</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00128">NodeIDAllocator.h:128</a></div></div>
|
|
574
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a09d2dbb2faab0a0e03bfa353534116a8"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">SVF::NodeIDAllocator::Clusterer::DistanceMatrixTime</a></div><div class="ttdeci">static const std::string DistanceMatrixTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00116">NodeIDAllocator.h:116</a></div></div>
|
|
575
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afef85f0ecacd681357b3945f97d52964"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">SVF::NodeIDAllocator::Clusterer::TotalTime</a></div><div class="ttdeci">static const std::string TotalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00120">NodeIDAllocator.h:120</a></div></div>
|
|
576
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1d98862e19affdd08740f85490d0d856"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">SVF::NodeIDAllocator::Clusterer::EvalTime</a></div><div class="ttdeci">static const std::string EvalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00119">NodeIDAllocator.h:119</a></div></div>
|
|
577
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1bf9461c717e8dabaee6a57f3d76d61f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">SVF::NodeIDAllocator::Clusterer::NumNonTrivialRegionObjects</a></div><div class="ttdeci">static const std::string NumNonTrivialRegionObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00130">NodeIDAllocator.h:130</a></div></div>
|
|
578
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_af3fe4b4098898ee38928c9db30ea0fe9"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">SVF::NodeIDAllocator::Clusterer::NewBvNumWords</a></div><div class="ttdeci">static const std::string NewBvNumWords</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00124">NodeIDAllocator.h:124</a></div></div>
|
|
579
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac5fe44f10cdbca9754444943a0f5c3c1"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">SVF::NodeIDAllocator::Clusterer::NumRegions</a></div><div class="ttdeci">static const std::string NumRegions</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00126">NodeIDAllocator.h:126</a></div></div>
|
|
580
580
|
</div><!-- fragment -->
|
|
581
581
|
</div>
|
|
582
582
|
</div>
|
|
@@ -622,10 +622,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
622
622
|
<p>Returns a vector mapping object IDs to a label such that if two objects appear in the same points-to set, they have the same label. The "appear in the same
|
|
623
623
|
points-to set" is encoded by graph which is an adjacency list ensuring that x in pt(p) and y in pt(p) -> x is reachable from y. </p>
|
|
624
624
|
|
|
625
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
626
|
-
<div class="fragment"><div class="line"><a name="
|
|
625
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00534">534</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
626
|
+
<div class="fragment"><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  {</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordtype">unsigned</span> label = UINT_MAX;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  std::vector<NodeID> labels(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, UINT_MAX);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  Set<NodeID> labelled;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, Set<NodeID>>::value_type &oos : graph)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = oos.first;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">if</span> (labels[o] != UINT_MAX) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  std::queue<NodeID> bfsQueue;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  bfsQueue.push(o);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  ++label;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keywordflow">while</span> (!bfsQueue.empty())</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">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = bfsQueue.front();</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  bfsQueue.pop();</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">if</span> (labels[o] != UINT_MAX)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(labels[o] == label);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">continue</span>;</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"> 556</span>  labels[o] = label;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  Map<NodeID, Set<NodeID>>::const_iterator neighboursIt = graph.find(o);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(neighboursIt != graph.end());</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> neighbour : neighboursIt->second) bfsQueue.push(neighbour);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  }</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  }</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="comment">// The remaining objects have no relation with others: they get their own label.</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> o = 0; o < <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>; ++o)</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="keywordflow">if</span> (labels[o] == UINT_MAX) labels[o] = ++label;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  numLabels = label + 1;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">return</span> labels;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
627
627
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
628
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a190c729a3f3f622f82cee4917946b50f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">SVF::NodeIDAllocator::numObjects</a></div><div class="ttdeci">NodeID numObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#
|
|
628
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a190c729a3f3f622f82cee4917946b50f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">SVF::NodeIDAllocator::numObjects</a></div><div class="ttdeci">NodeID numObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00087">NodeIDAllocator.h:87</a></div></div>
|
|
629
629
|
<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#l00100">SVFBasicTypes.h:100</a></div></div>
|
|
630
630
|
</div><!-- fragment -->
|
|
631
631
|
</div>
|
|
@@ -656,8 +656,8 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
656
656
|
|
|
657
657
|
<p>Returns the minimum number of bits required to represent pts in a perfect world. </p>
|
|
658
658
|
|
|
659
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
660
|
-
<div class="fragment"><div class="line"><a name="
|
|
659
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00419">419</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
660
|
+
<div class="fragment"><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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(pts.count());</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  }</div><div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a9aea96839c51ac1e2cbf4813174bb21c"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">SVF::NodeIDAllocator::Clusterer::requiredBits</a></div><div class="ttdeci">static unsigned requiredBits(const PointsTo &pts)</div><div class="ttdoc">Returns the minimum number of bits required to represent pts in a perfect world. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00419">NodeIDAllocator.cpp:419</a></div></div>
|
|
661
661
|
</div><!-- fragment -->
|
|
662
662
|
</div>
|
|
663
663
|
</div>
|
|
@@ -687,8 +687,8 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
687
687
|
|
|
688
688
|
<p>Returns the minimum number of bits required to represent n items in a perfect world. </p>
|
|
689
689
|
|
|
690
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
691
|
-
<div class="fragment"><div class="line"><a name="
|
|
690
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00424">424</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
691
|
+
<div class="fragment"><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">if</span> (n == 0) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="comment">// Ceiling of number of bits amongst each native integer gives needed native ints,</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="comment">// so we then multiply again by the number of bits in each native int.</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">return</span> ((n - 1) / <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a> + 1) * <a class="code" href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  }</div><div class="ttc" id="SVFBasicTypes_8h_html_ab8ca0fd9d0caa6817d305cae0f1cf022"><div class="ttname"><a href="SVFBasicTypes_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a></div><div class="ttdeci">#define NATIVE_INT_SIZE</div><div class="ttdoc">Size of native integer that we&#39;ll use for bit vectors, in bits. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00180">SVFBasicTypes.h:180</a></div></div>
|
|
692
692
|
</div><!-- fragment -->
|
|
693
693
|
</div>
|
|
694
694
|
</div>
|
|
@@ -757,9 +757,9 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
757
757
|
</div><div class="memdoc">
|
|
758
758
|
<p>Traverses the dendrogram produced by fastcluster, making node o, where o is the nth leaf (per recursive DFS) map to n. index is the dendrogram node to work off. The traversal should start at the top, which is the "last" (consider that it is 2D) element of the dendrogram, numObjects - 1. </p>
|
|
759
759
|
|
|
760
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#
|
|
761
|
-
<div class="fragment"><div class="line"><a name="
|
|
762
|
-
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_abd44e3b07b0482bacf6b1a080fe650c6"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">SVF::NodeIDAllocator::Clusterer::traverseDendrogram</a></div><div class="ttdeci">static void traverseDendrogram(std::vector< NodeID > &nodeMap, const int *dendrogram, const size_t numObjects, unsigned &allocCounter, Set< int > &visited, const int index, const std::vector< NodeID > &regionNodeMap)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#
|
|
760
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00503">503</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
|
|
761
|
+
<div class="fragment"><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">if</span> (visited.find(index) != visited.end()) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  visited.insert(index);</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>  <span class="keywordtype">int</span> left = dendrogram[index - 1];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">if</span> (left < 0)</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>  <span class="comment">// Reached a leaf.</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="comment">// -1 because the items start from 1 per fastcluster (TODO).</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  nodeMap[regionNodeMap[std::abs(left) - 1]] = allocCounter;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  ++allocCounter;</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>  <span class="keywordflow">else</span></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>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">traverseDendrogram</a>(nodeMap, dendrogram, <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, allocCounter, visited, left, regionNodeMap);</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> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="comment">// Repeat for the right child.</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordtype">int</span> right = dendrogram[(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> - 1) + index - 1];</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">if</span> (right < 0)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  nodeMap[regionNodeMap[std::abs(right) - 1]] = allocCounter;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  ++allocCounter;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">else</span></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>  <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">traverseDendrogram</a>(nodeMap, dendrogram, <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, allocCounter, visited, right, regionNodeMap);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  }</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  }</div><div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a190c729a3f3f622f82cee4917946b50f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">SVF::NodeIDAllocator::numObjects</a></div><div class="ttdeci">NodeID numObjects</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00087">NodeIDAllocator.h:87</a></div></div>
|
|
762
|
+
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_abd44e3b07b0482bacf6b1a080fe650c6"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">SVF::NodeIDAllocator::Clusterer::traverseDendrogram</a></div><div class="ttdeci">static void traverseDendrogram(std::vector< NodeID > &nodeMap, const int *dendrogram, const size_t numObjects, unsigned &allocCounter, Set< int > &visited, const int index, const std::vector< NodeID > &regionNodeMap)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00503">NodeIDAllocator.cpp:503</a></div></div>
|
|
763
763
|
</div><!-- fragment -->
|
|
764
764
|
</div>
|
|
765
765
|
</div>
|
|
@@ -784,7 +784,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
784
784
|
</table>
|
|
785
785
|
</div><div class="memdoc">
|
|
786
786
|
|
|
787
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
787
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00129">129</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
788
788
|
|
|
789
789
|
</div>
|
|
790
790
|
</div>
|
|
@@ -808,7 +808,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
808
808
|
</table>
|
|
809
809
|
</div><div class="memdoc">
|
|
810
810
|
|
|
811
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
811
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00118">118</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
812
812
|
|
|
813
813
|
</div>
|
|
814
814
|
</div>
|
|
@@ -832,7 +832,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
832
832
|
</table>
|
|
833
833
|
</div><div class="memdoc">
|
|
834
834
|
|
|
835
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
835
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00116">116</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
836
836
|
|
|
837
837
|
</div>
|
|
838
838
|
</div>
|
|
@@ -856,7 +856,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
856
856
|
</table>
|
|
857
857
|
</div><div class="memdoc">
|
|
858
858
|
|
|
859
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
859
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00119">119</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
860
860
|
|
|
861
861
|
</div>
|
|
862
862
|
</div>
|
|
@@ -880,7 +880,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
880
880
|
</table>
|
|
881
881
|
</div><div class="memdoc">
|
|
882
882
|
|
|
883
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
883
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00117">117</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
884
884
|
|
|
885
885
|
</div>
|
|
886
886
|
</div>
|
|
@@ -904,7 +904,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
904
904
|
</table>
|
|
905
905
|
</div><div class="memdoc">
|
|
906
906
|
|
|
907
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
907
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00128">128</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
908
908
|
|
|
909
909
|
</div>
|
|
910
910
|
</div>
|
|
@@ -928,7 +928,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
928
928
|
</table>
|
|
929
929
|
</div><div class="memdoc">
|
|
930
930
|
|
|
931
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
931
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00124">124</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
932
932
|
|
|
933
933
|
</div>
|
|
934
934
|
</div>
|
|
@@ -952,7 +952,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
952
952
|
</table>
|
|
953
953
|
</div><div class="memdoc">
|
|
954
954
|
|
|
955
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
955
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00125">125</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
956
956
|
|
|
957
957
|
</div>
|
|
958
958
|
</div>
|
|
@@ -976,7 +976,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
976
976
|
</table>
|
|
977
977
|
</div><div class="memdoc">
|
|
978
978
|
|
|
979
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
979
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00127">127</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
980
980
|
|
|
981
981
|
</div>
|
|
982
982
|
</div>
|
|
@@ -1000,7 +1000,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
1000
1000
|
</table>
|
|
1001
1001
|
</div><div class="memdoc">
|
|
1002
1002
|
|
|
1003
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
1003
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00130">130</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
1004
1004
|
|
|
1005
1005
|
</div>
|
|
1006
1006
|
</div>
|
|
@@ -1025,7 +1025,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
1025
1025
|
</div><div class="memdoc">
|
|
1026
1026
|
<p>Statistics strings. </p>
|
|
1027
1027
|
|
|
1028
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
1028
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00114">114</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
1029
1029
|
|
|
1030
1030
|
</div>
|
|
1031
1031
|
</div>
|
|
@@ -1049,7 +1049,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
1049
1049
|
</table>
|
|
1050
1050
|
</div><div class="memdoc">
|
|
1051
1051
|
|
|
1052
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
1052
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00126">126</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
1053
1053
|
|
|
1054
1054
|
</div>
|
|
1055
1055
|
</div>
|
|
@@ -1073,7 +1073,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
1073
1073
|
</table>
|
|
1074
1074
|
</div><div class="memdoc">
|
|
1075
1075
|
|
|
1076
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
1076
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00122">122</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
1077
1077
|
|
|
1078
1078
|
</div>
|
|
1079
1079
|
</div>
|
|
@@ -1097,7 +1097,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
1097
1097
|
</table>
|
|
1098
1098
|
</div><div class="memdoc">
|
|
1099
1099
|
|
|
1100
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
1100
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00123">123</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
1101
1101
|
|
|
1102
1102
|
</div>
|
|
1103
1103
|
</div>
|
|
@@ -1121,7 +1121,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
1121
1121
|
</table>
|
|
1122
1122
|
</div><div class="memdoc">
|
|
1123
1123
|
|
|
1124
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
1124
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00115">115</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
1125
1125
|
|
|
1126
1126
|
</div>
|
|
1127
1127
|
</div>
|
|
@@ -1145,7 +1145,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
1145
1145
|
</table>
|
|
1146
1146
|
</div><div class="memdoc">
|
|
1147
1147
|
|
|
1148
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
1148
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00121">121</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
1149
1149
|
|
|
1150
1150
|
</div>
|
|
1151
1151
|
</div>
|
|
@@ -1169,7 +1169,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
|
|
|
1169
1169
|
</table>
|
|
1170
1170
|
</div><div class="memdoc">
|
|
1171
1171
|
|
|
1172
|
-
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#
|
|
1172
|
+
<p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00120">120</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
|
|
1173
1173
|
|
|
1174
1174
|
</div>
|
|
1175
1175
|
</div>
|