svf-tools 1.0.773 → 1.0.775

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.
Files changed (396) hide show
  1. package/SVF-doxygen/html/html/AddressValue_8h_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -9
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/CFBasicBlockG_8cpp_source.html +2 -2
  6. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +1 -1
  7. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
  8. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +3 -3
  9. package/SVF-doxygen/html/html/ConsExeState_8h_source.html +1 -1
  10. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/ConsG_8h_source.html +8 -8
  12. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +7 -7
  13. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
  14. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  16. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +3 -3
  17. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  18. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +9 -9
  19. package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
  20. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  21. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +4 -4
  22. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +4 -4
  23. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
  24. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +5 -5
  26. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  27. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +3 -3
  28. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +3 -3
  29. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
  30. package/SVF-doxygen/html/html/MTA_8cpp_source.html +4 -4
  31. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +15 -15
  32. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
  33. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  34. package/SVF-doxygen/html/html/MemSSA_8h_source.html +1 -1
  35. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +670 -671
  36. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +114 -107
  37. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +1 -1
  38. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +395 -350
  39. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +443 -433
  40. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +6 -6
  41. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +12 -12
  42. package/SVF-doxygen/html/html/SVFFileSystem_8cpp_source.html +6 -6
  43. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -3
  44. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +10 -10
  45. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  46. package/SVF-doxygen/html/html/SVFIR2ConsExeState_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +2 -2
  49. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +288 -286
  50. package/SVF-doxygen/html/html/SVFIR_8h_source.html +667 -665
  51. package/SVF-doxygen/html/html/SVFLoop_8h_source.html +3 -3
  52. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +7 -7
  53. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +1 -1
  55. package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +2 -2
  56. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +6 -6
  57. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  59. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  61. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
  62. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  64. package/SVF-doxygen/html/html/VFG_8cpp_source.html +15 -15
  65. package/SVF-doxygen/html/html/VFG_8h_source.html +5 -5
  66. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +4 -4
  67. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +284 -124
  68. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +108 -95
  69. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +1 -1
  71. package/SVF-doxygen/html/html/classSVF_1_1AddressValue.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
  73. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +59 -54
  74. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +30 -20
  75. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +52 -47
  76. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +18 -9
  77. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +64 -59
  78. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +11 -1
  79. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +65 -60
  80. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +11 -1
  81. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
  82. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +60 -55
  83. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +10 -0
  84. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +31 -26
  85. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +573 -379
  86. package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockNode.html +2 -2
  87. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +37 -32
  88. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +24 -14
  89. package/SVF-doxygen/html/html/classSVF_1_1CFLBase-members.html +39 -34
  90. package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +10 -0
  91. package/SVF-doxygen/html/html/classSVF_1_1CFLVF-members.html +40 -35
  92. package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +10 -0
  93. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +305 -305
  94. package/SVF-doxygen/html/html/classSVF_1_1ConsExeState.html +1 -1
  95. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +7 -7
  96. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +8 -8
  97. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
  98. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +1 -1
  99. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
  100. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +8 -8
  101. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +66 -61
  102. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +10 -0
  103. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +54 -49
  104. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +11 -1
  105. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +65 -60
  106. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +28 -14
  107. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +5 -5
  108. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  109. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
  110. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
  111. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +3 -3
  112. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +14 -14
  113. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  114. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
  115. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
  116. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +1 -1
  117. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +14 -13
  118. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +131 -99
  119. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +554 -554
  120. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +4 -4
  121. package/SVF-doxygen/html/html/classSVF_1_1POCRAlias-members.html +41 -36
  122. package/SVF-doxygen/html/html/classSVF_1_1POCRAlias.html +10 -0
  123. package/SVF-doxygen/html/html/classSVF_1_1POCRHybrid-members.html +41 -36
  124. package/SVF-doxygen/html/html/classSVF_1_1POCRHybrid.html +10 -0
  125. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +1 -1
  126. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +15 -15
  127. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +10 -10
  128. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +3 -3
  129. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +175 -174
  130. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +754 -720
  131. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ConsExeState.html +1 -1
  132. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +1 -1
  133. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +29 -29
  134. package/SVF-doxygen/html/html/classSVF_1_1SVFIRReader.html +3 -3
  135. package/SVF-doxygen/html/html/classSVF_1_1SVFIRWriter.html +2 -2
  136. package/SVF-doxygen/html/html/classSVF_1_1SVFLoop.html +3 -3
  137. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +7 -7
  138. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +1 -1
  139. package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +2 -2
  140. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +6 -6
  141. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  142. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +55 -50
  143. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +24 -14
  144. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
  145. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +55 -50
  148. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +12 -2
  149. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +18 -18
  150. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +21 -14
  151. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +339 -49
  152. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +10 -10
  153. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +86 -86
  154. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
  155. package/SVF-doxygen/html/html/functions_a.html +1 -1
  156. package/SVF-doxygen/html/html/functions_b.html +1 -0
  157. package/SVF-doxygen/html/html/functions_f.html +6 -6
  158. package/SVF-doxygen/html/html/functions_func.html +1 -1
  159. package/SVF-doxygen/html/html/functions_func_i.html +14 -11
  160. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  161. package/SVF-doxygen/html/html/functions_func_r.html +16 -3
  162. package/SVF-doxygen/html/html/functions_func_s.html +21 -20
  163. package/SVF-doxygen/html/html/functions_func_w.html +11 -2
  164. package/SVF-doxygen/html/html/functions_i.html +22 -19
  165. package/SVF-doxygen/html/html/functions_l.html +3 -3
  166. package/SVF-doxygen/html/html/functions_o.html +12 -12
  167. package/SVF-doxygen/html/html/functions_p.html +13 -13
  168. package/SVF-doxygen/html/html/functions_r.html +20 -11
  169. package/SVF-doxygen/html/html/functions_rela_b.html +3 -0
  170. package/SVF-doxygen/html/html/functions_s.html +23 -24
  171. package/SVF-doxygen/html/html/functions_t.html +5 -5
  172. package/SVF-doxygen/html/html/functions_v.html +6 -6
  173. package/SVF-doxygen/html/html/functions_w.html +17 -8
  174. package/SVF-doxygen/html/html/namespaceSVF.html +1 -1
  175. package/SVF-doxygen/html/html/search/all_1.js +1 -1
  176. package/SVF-doxygen/html/html/search/all_10.js +324 -324
  177. package/SVF-doxygen/html/html/search/all_11.js +217 -213
  178. package/SVF-doxygen/html/html/search/all_12.js +541 -541
  179. package/SVF-doxygen/html/html/search/all_13.js +190 -190
  180. package/SVF-doxygen/html/html/search/all_14.js +66 -66
  181. package/SVF-doxygen/html/html/search/all_15.js +170 -170
  182. package/SVF-doxygen/html/html/search/all_16.js +63 -60
  183. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  184. package/SVF-doxygen/html/html/search/all_18.js +1 -1
  185. package/SVF-doxygen/html/html/search/all_19.js +11 -11
  186. package/SVF-doxygen/html/html/search/all_1a.js +169 -169
  187. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  188. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  189. package/SVF-doxygen/html/html/search/all_9.js +535 -534
  190. package/SVF-doxygen/html/html/search/all_a.js +46 -46
  191. package/SVF-doxygen/html/html/search/all_b.js +26 -26
  192. package/SVF-doxygen/html/html/search/all_c.js +116 -116
  193. package/SVF-doxygen/html/html/search/all_d.js +196 -196
  194. package/SVF-doxygen/html/html/search/all_e.js +206 -206
  195. package/SVF-doxygen/html/html/search/all_f.js +116 -116
  196. package/SVF-doxygen/html/html/search/classes_0.js +26 -26
  197. package/SVF-doxygen/html/html/search/classes_1.js +9 -9
  198. package/SVF-doxygen/html/html/search/classes_10.js +73 -73
  199. package/SVF-doxygen/html/html/search/classes_11.js +15 -15
  200. package/SVF-doxygen/html/html/search/classes_12.js +2 -2
  201. package/SVF-doxygen/html/html/search/classes_13.js +10 -10
  202. package/SVF-doxygen/html/html/search/classes_14.js +14 -14
  203. package/SVF-doxygen/html/html/search/classes_15.js +1 -1
  204. package/SVF-doxygen/html/html/search/classes_2.js +76 -76
  205. package/SVF-doxygen/html/html/search/classes_3.js +35 -35
  206. package/SVF-doxygen/html/html/search/classes_4.js +8 -8
  207. package/SVF-doxygen/html/html/search/classes_5.js +28 -28
  208. package/SVF-doxygen/html/html/search/classes_6.js +98 -98
  209. package/SVF-doxygen/html/html/search/classes_7.js +33 -33
  210. package/SVF-doxygen/html/html/search/classes_8.js +56 -56
  211. package/SVF-doxygen/html/html/search/classes_9.js +1 -1
  212. package/SVF-doxygen/html/html/search/classes_a.js +12 -12
  213. package/SVF-doxygen/html/html/search/classes_b.js +29 -29
  214. package/SVF-doxygen/html/html/search/classes_c.js +6 -6
  215. package/SVF-doxygen/html/html/search/classes_d.js +18 -18
  216. package/SVF-doxygen/html/html/search/classes_e.js +36 -36
  217. package/SVF-doxygen/html/html/search/classes_f.js +25 -25
  218. package/SVF-doxygen/html/html/search/defines_0.js +3 -3
  219. package/SVF-doxygen/html/html/search/defines_1.js +2 -2
  220. package/SVF-doxygen/html/html/search/defines_2.js +30 -30
  221. package/SVF-doxygen/html/html/search/defines_3.js +20 -20
  222. package/SVF-doxygen/html/html/search/defines_4.js +3 -3
  223. package/SVF-doxygen/html/html/search/defines_5.js +4 -4
  224. package/SVF-doxygen/html/html/search/defines_6.js +2 -2
  225. package/SVF-doxygen/html/html/search/defines_7.js +5 -5
  226. package/SVF-doxygen/html/html/search/defines_8.js +11 -11
  227. package/SVF-doxygen/html/html/search/defines_9.js +9 -9
  228. package/SVF-doxygen/html/html/search/defines_a.js +2 -2
  229. package/SVF-doxygen/html/html/search/defines_b.js +1 -1
  230. package/SVF-doxygen/html/html/search/defines_c.js +3 -3
  231. package/SVF-doxygen/html/html/search/defines_d.js +2 -2
  232. package/SVF-doxygen/html/html/search/defines_e.js +7 -7
  233. package/SVF-doxygen/html/html/search/defines_f.js +3 -3
  234. package/SVF-doxygen/html/html/search/enums_0.js +3 -3
  235. package/SVF-doxygen/html/html/search/enums_1.js +2 -2
  236. package/SVF-doxygen/html/html/search/enums_10.js +1 -1
  237. package/SVF-doxygen/html/html/search/enums_11.js +1 -1
  238. package/SVF-doxygen/html/html/search/enums_2.js +8 -8
  239. package/SVF-doxygen/html/html/search/enums_3.js +1 -1
  240. package/SVF-doxygen/html/html/search/enums_4.js +3 -3
  241. package/SVF-doxygen/html/html/search/enums_5.js +1 -1
  242. package/SVF-doxygen/html/html/search/enums_6.js +2 -2
  243. package/SVF-doxygen/html/html/search/enums_7.js +2 -2
  244. package/SVF-doxygen/html/html/search/enums_8.js +4 -4
  245. package/SVF-doxygen/html/html/search/enums_9.js +1 -1
  246. package/SVF-doxygen/html/html/search/enums_a.js +1 -1
  247. package/SVF-doxygen/html/html/search/enums_b.js +7 -7
  248. package/SVF-doxygen/html/html/search/enums_c.js +1 -1
  249. package/SVF-doxygen/html/html/search/enums_d.js +4 -4
  250. package/SVF-doxygen/html/html/search/enums_e.js +2 -2
  251. package/SVF-doxygen/html/html/search/enums_f.js +4 -4
  252. package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
  253. package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -14
  254. package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
  255. package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
  256. package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
  257. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  258. package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
  259. package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
  260. package/SVF-doxygen/html/html/search/enumvalues_2.js +36 -36
  261. package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
  262. package/SVF-doxygen/html/html/search/enumvalues_4.js +2 -2
  263. package/SVF-doxygen/html/html/search/enumvalues_5.js +47 -47
  264. package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
  265. package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
  266. package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
  267. package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
  268. package/SVF-doxygen/html/html/search/enumvalues_a.js +15 -15
  269. package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
  270. package/SVF-doxygen/html/html/search/enumvalues_c.js +5 -5
  271. package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -18
  272. package/SVF-doxygen/html/html/search/enumvalues_e.js +9 -9
  273. package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
  274. package/SVF-doxygen/html/html/search/files_0.js +13 -13
  275. package/SVF-doxygen/html/html/search/files_1.js +7 -7
  276. package/SVF-doxygen/html/html/search/files_10.js +8 -8
  277. package/SVF-doxygen/html/html/search/files_11.js +8 -8
  278. package/SVF-doxygen/html/html/search/files_12.js +2 -2
  279. package/SVF-doxygen/html/html/search/files_2.js +49 -49
  280. package/SVF-doxygen/html/html/search/files_3.js +14 -14
  281. package/SVF-doxygen/html/html/search/files_4.js +5 -5
  282. package/SVF-doxygen/html/html/search/files_5.js +13 -13
  283. package/SVF-doxygen/html/html/search/files_6.js +9 -9
  284. package/SVF-doxygen/html/html/search/files_7.js +14 -14
  285. package/SVF-doxygen/html/html/search/files_8.js +13 -13
  286. package/SVF-doxygen/html/html/search/files_9.js +18 -18
  287. package/SVF-doxygen/html/html/search/files_a.js +3 -3
  288. package/SVF-doxygen/html/html/search/files_b.js +2 -2
  289. package/SVF-doxygen/html/html/search/files_c.js +20 -20
  290. package/SVF-doxygen/html/html/search/files_d.js +4 -4
  291. package/SVF-doxygen/html/html/search/files_e.js +62 -62
  292. package/SVF-doxygen/html/html/search/files_f.js +8 -8
  293. package/SVF-doxygen/html/html/search/functions_0.js +12 -12
  294. package/SVF-doxygen/html/html/search/functions_1.js +350 -350
  295. package/SVF-doxygen/html/html/search/functions_10.js +140 -140
  296. package/SVF-doxygen/html/html/search/functions_11.js +131 -127
  297. package/SVF-doxygen/html/html/search/functions_12.js +275 -275
  298. package/SVF-doxygen/html/html/search/functions_13.js +58 -58
  299. package/SVF-doxygen/html/html/search/functions_14.js +38 -38
  300. package/SVF-doxygen/html/html/search/functions_15.js +71 -71
  301. package/SVF-doxygen/html/html/search/functions_16.js +32 -29
  302. package/SVF-doxygen/html/html/search/functions_17.js +3 -3
  303. package/SVF-doxygen/html/html/search/functions_18.js +169 -169
  304. package/SVF-doxygen/html/html/search/functions_2.js +84 -84
  305. package/SVF-doxygen/html/html/search/functions_3.js +253 -253
  306. package/SVF-doxygen/html/html/search/functions_4.js +74 -74
  307. package/SVF-doxygen/html/html/search/functions_5.js +51 -51
  308. package/SVF-doxygen/html/html/search/functions_6.js +58 -58
  309. package/SVF-doxygen/html/html/search/functions_7.js +842 -842
  310. package/SVF-doxygen/html/html/search/functions_8.js +143 -143
  311. package/SVF-doxygen/html/html/search/functions_9.js +423 -422
  312. package/SVF-doxygen/html/html/search/functions_a.js +30 -30
  313. package/SVF-doxygen/html/html/search/functions_b.js +2 -2
  314. package/SVF-doxygen/html/html/search/functions_c.js +26 -26
  315. package/SVF-doxygen/html/html/search/functions_d.js +77 -77
  316. package/SVF-doxygen/html/html/search/functions_e.js +35 -35
  317. package/SVF-doxygen/html/html/search/functions_f.js +56 -56
  318. package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
  319. package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
  320. package/SVF-doxygen/html/html/search/related_0.js +2 -2
  321. package/SVF-doxygen/html/html/search/related_1.js +2 -1
  322. package/SVF-doxygen/html/html/search/related_2.js +2 -2
  323. package/SVF-doxygen/html/html/search/related_3.js +2 -2
  324. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  325. package/SVF-doxygen/html/html/search/related_5.js +1 -1
  326. package/SVF-doxygen/html/html/search/related_6.js +2 -2
  327. package/SVF-doxygen/html/html/search/related_7.js +4 -4
  328. package/SVF-doxygen/html/html/search/related_8.js +2 -2
  329. package/SVF-doxygen/html/html/search/related_9.js +4 -4
  330. package/SVF-doxygen/html/html/search/related_a.js +19 -19
  331. package/SVF-doxygen/html/html/search/related_b.js +4 -4
  332. package/SVF-doxygen/html/html/search/related_c.js +1 -1
  333. package/SVF-doxygen/html/html/search/related_d.js +11 -11
  334. package/SVF-doxygen/html/html/search/related_e.js +2 -2
  335. package/SVF-doxygen/html/html/search/related_f.js +2 -2
  336. package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
  337. package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
  338. package/SVF-doxygen/html/html/search/typedefs_10.js +62 -62
  339. package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
  340. package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
  341. package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
  342. package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
  343. package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
  344. package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
  345. package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
  346. package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
  347. package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
  348. package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
  349. package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
  350. package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
  351. package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
  352. package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
  353. package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
  354. package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
  355. package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
  356. package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
  357. package/SVF-doxygen/html/html/search/variables_0.js +147 -147
  358. package/SVF-doxygen/html/html/search/variables_1.js +75 -75
  359. package/SVF-doxygen/html/html/search/variables_10.js +97 -97
  360. package/SVF-doxygen/html/html/search/variables_11.js +46 -46
  361. package/SVF-doxygen/html/html/search/variables_12.js +92 -92
  362. package/SVF-doxygen/html/html/search/variables_13.js +75 -75
  363. package/SVF-doxygen/html/html/search/variables_14.js +14 -14
  364. package/SVF-doxygen/html/html/search/variables_15.js +48 -48
  365. package/SVF-doxygen/html/html/search/variables_16.js +9 -9
  366. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  367. package/SVF-doxygen/html/html/search/variables_18.js +2 -2
  368. package/SVF-doxygen/html/html/search/variables_2.js +34 -34
  369. package/SVF-doxygen/html/html/search/variables_3.js +141 -141
  370. package/SVF-doxygen/html/html/search/variables_4.js +55 -55
  371. package/SVF-doxygen/html/html/search/variables_5.js +38 -38
  372. package/SVF-doxygen/html/html/search/variables_6.js +66 -66
  373. package/SVF-doxygen/html/html/search/variables_7.js +33 -33
  374. package/SVF-doxygen/html/html/search/variables_8.js +7 -7
  375. package/SVF-doxygen/html/html/search/variables_9.js +77 -77
  376. package/SVF-doxygen/html/html/search/variables_a.js +4 -4
  377. package/SVF-doxygen/html/html/search/variables_b.js +10 -10
  378. package/SVF-doxygen/html/html/search/variables_c.js +45 -45
  379. package/SVF-doxygen/html/html/search/variables_d.js +56 -56
  380. package/SVF-doxygen/html/html/search/variables_e.js +123 -123
  381. package/SVF-doxygen/html/html/search/variables_f.js +30 -30
  382. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  383. package/SVF-doxygen/html/html/structSVF_1_1VersionedFlowSensitive_1_1SCC_1_1NodeData.html +4 -4
  384. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  385. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  386. package/package.json +1 -1
  387. package/svf/include/MemoryModel/PointerAnalysisImpl.h +5 -0
  388. package/svf/include/MemoryModel/SVFLoop.h +3 -3
  389. package/svf/include/SVFIR/SVFIR.h +2 -1
  390. package/svf/include/Util/NodeIDAllocator.h +6 -0
  391. package/svf/include/WPA/VersionedFlowSensitive.h +8 -0
  392. package/svf/lib/MemoryModel/PointerAnalysisImpl.cpp +101 -66
  393. package/svf/lib/SVFIR/SVFIR.cpp +5 -3
  394. package/svf/lib/Util/NodeIDAllocator.cpp +2 -4
  395. package/svf/lib/WPA/Andersen.cpp +1 -1
  396. package/svf/lib/WPA/VersionedFlowSensitive.cpp +148 -0
@@ -154,7 +154,7 @@ Static Private Attributes</h2></td></tr>
154
154
  <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
155
155
  <div class="textblock"><p>Perform clustering given points-to sets with nodes allocated according to the DENSE strategy. </p>
156
156
 
157
- <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00111">111</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
157
+ <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>
158
158
  </div><h2 class="groupheader">Member Typedef Documentation</h2>
159
159
  <a id="a1f74f1e72a844166f742d2d46efbbb5e"></a>
160
160
  <h2 class="memtitle"><span class="permalink"><a href="#a1f74f1e72a844166f742d2d46efbbb5e">&#9670;&nbsp;</a></span>DistOccMap</h2>
@@ -177,7 +177,7 @@ Static Private Attributes</h2></td></tr>
177
177
  </div><div class="memdoc">
178
178
  <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>
179
179
 
180
- <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>
180
+ <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>
181
181
 
182
182
  </div>
183
183
  </div>
@@ -229,215 +229,215 @@ Static Private Attributes</h2></td></tr>
229
229
  </div><div class="memdoc">
230
230
  <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>
231
231
 
232
- <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00189">189</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
233
- <div class="fragment"><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;{</div>
234
- <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; assert(pta != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Clusterer::cluster: given null BVDataPTAImpl&quot;</span>);</div>
235
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; assert(<a class="code" href="classSVF_1_1Options.html#a38107576f4f242191cdbfb1ca51f93cd">Options::NodeAllocStrat</a>() == Strategy::DENSE &amp;&amp; <span class="stringliteral">&quot;Clusterer::cluster: only dense allocation clustering currently supported&quot;</span>);</div>
236
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
237
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; Map&lt;std::string, std::string&gt; overallStats;</div>
238
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">double</span> fastClusterTime = 0.0;</div>
239
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">double</span> distanceMatrixTime = 0.0;</div>
240
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordtype">double</span> dendrogramTraversalTime = 0.0;</div>
241
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordtype">double</span> regioningTime = 0.0;</div>
242
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordtype">double</span> evalTime = 0.0;</div>
243
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
244
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// Pair of nodes to their (minimum) distance and the number of occurrences of that distance.</span></div>
245
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; Map&lt;std::pair&lt;NodeID, NodeID&gt;, std::pair&lt;unsigned, unsigned&gt;&gt; distances;</div>
232
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00187">187</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
233
+ <div class="fragment"><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;{</div>
234
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; assert(pta != <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;Clusterer::cluster: given null BVDataPTAImpl&quot;</span>);</div>
235
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; assert(<a class="code" href="classSVF_1_1Options.html#a38107576f4f242191cdbfb1ca51f93cd">Options::NodeAllocStrat</a>() == Strategy::DENSE &amp;&amp; <span class="stringliteral">&quot;Clusterer::cluster: only dense allocation clustering currently supported&quot;</span>);</div>
236
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; </div>
237
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; Map&lt;std::string, std::string&gt; overallStats;</div>
238
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordtype">double</span> fastClusterTime = 0.0;</div>
239
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">double</span> distanceMatrixTime = 0.0;</div>
240
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">double</span> dendrogramTraversalTime = 0.0;</div>
241
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">double</span> regioningTime = 0.0;</div>
242
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordtype">double</span> evalTime = 0.0;</div>
243
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
244
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// Pair of nodes to their (minimum) distance and the number of occurrences of that distance.</span></div>
245
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; Map&lt;std::pair&lt;NodeID, NodeID&gt;, std::pair&lt;unsigned, unsigned&gt;&gt; distances;</div>
246
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
247
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
246
248
  <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
247
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
248
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
249
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="comment">// Map points-to sets to occurrences.</span></div>
250
- <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; Map&lt;PointsTo, unsigned&gt; pointsToSets;</div>
251
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; </div>
252
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="comment">// Objects each object shares at least a points-to set with.</span></div>
253
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; Map&lt;NodeID, Set&lt;NodeID&gt;&gt; coPointeeGraph;</div>
254
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair&lt;NodeID, unsigned&gt; &amp;keyOcc : keys)</div>
255
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div>
256
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">const</span> PointsTo &amp;pts = pta-&gt;getPts(keyOcc.first);</div>
257
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> oldSize = pointsToSets.size();</div>
258
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; pointsToSets[pts] += keyOcc.second;;</div>
259
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
260
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// Edges in this graph have no weight or uniqueness, so we only need to</span></div>
261
- <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="comment">// do this for each points-to set once.</span></div>
262
- <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">if</span> (oldSize != pointsToSets.size())</div>
263
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
264
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> firstO = !pts.empty() ? *(pts.begin()) : 0;</div>
265
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; Set&lt;NodeID&gt; &amp;firstOsNeighbours = coPointeeGraph[firstO];</div>
266
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
267
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
268
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (o != firstO)</div>
269
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div>
270
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; firstOsNeighbours.insert(o);</div>
271
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; coPointeeGraph[o].insert(firstO);</div>
272
- <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
273
- <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
274
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
275
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
276
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; </div>
277
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <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>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>;</div>
278
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">NumObjects</a>] = std::to_string(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>);</div>
279
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; </div>
280
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">size_t</span> numRegions = 0;</div>
281
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; std::vector&lt;unsigned&gt; objectsRegion;</div>
282
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a8cc5b2a363724b558f4932277a87c0f6">Options::RegionedClustering</a>())</div>
283
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; {</div>
284
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; objectsRegion = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a7d34542f34a8e8008119c3d61943daa2">regionObjects</a>(coPointeeGraph, <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, numRegions);</div>
285
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div>
286
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">else</span></div>
287
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div>
288
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// Just a single big region (0).</span></div>
289
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; objectsRegion.insert(objectsRegion.end(), <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, 0);</div>
290
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; numRegions = 1;</div>
291
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
292
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
293
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// Set needs to be ordered because getDistanceMatrix, in its n^2 iteration, expects</span></div>
294
- <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// sets to be ordered (we are building a condensed matrix, not a full matrix, so it</span></div>
295
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// matters). In getDistanceMatrix, doing regionReverseMapping for oi and oj, where</span></div>
296
- <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// oi &lt; oj, and getting a result moi &gt; moj gives incorrect results.</span></div>
297
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// In the condensed matrix, [b][a] where b &gt;= a, is incorrect.</span></div>
298
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; std::vector&lt;OrderedSet&lt;NodeID&gt;&gt; regionsObjects(numRegions);</div>
299
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = 0; o &lt; <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>; ++o) regionsObjects[objectsRegion[o]].insert(o);</div>
300
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
301
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// Size of the return node mapping. It is potentially larger than the number of</span></div>
302
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// objects because we align each region to NATIVE_INT_SIZE.</span></div>
303
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// size_t numMappings = 0;</span></div>
304
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div>
305
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// Maps a region to a mapping which maps 0 to n to all objects</span></div>
306
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// in that region.</span></div>
307
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; std::vector&lt;std::vector&lt;NodeID&gt;&gt; regionMappings(numRegions);</div>
308
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// The reverse: region to mapping of objects to a 0 to n from above.</span></div>
309
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; std::vector&lt;Map&lt;NodeID, unsigned&gt;&gt; regionReverseMappings(numRegions);</div>
310
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="comment">// We can thus use 0 to n for each region to create smaller distance matrices.</span></div>
311
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> region = 0; region &lt; numRegions; ++region)</div>
312
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div>
313
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordtype">size_t</span> curr = 0;</div>
314
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// With the OrderedSet above, o1 &lt; o2 =&gt; map[o1] &lt; map[o2].</span></div>
315
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : regionsObjects[region])</div>
316
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div>
317
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// push_back here is just like p...[region][curr] = o.</span></div>
318
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; regionMappings[region].push_back(o);</div>
319
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; regionReverseMappings[region][o] = curr++;</div>
320
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
321
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; </div>
322
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// curr is the number of objects. A region with no objects makes no sense.</span></div>
323
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; assert(curr != 0);</div>
324
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
325
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="comment">// Number of bits needed for this region if we were</span></div>
326
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// to start assigning from 0 rounded up to the fewest needed</span></div>
327
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// native ints. This is added to the number of mappings since</span></div>
328
- <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// we align each region to a native int.</span></div>
329
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="comment">// numMappings += requiredBits(regionsObjects[region].size());</span></div>
330
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
331
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
332
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// Points-to sets which are relevant to a region, i.e., those whose elements</span></div>
333
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// belong to that region. Pair is for occurrences.</span></div>
334
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; std::vector&lt;std::vector&lt;std::pair&lt;const PointsTo *, unsigned&gt;&gt;&gt; regionsPointsTos(numRegions);</div>
335
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> Map&lt;PointsTo, unsigned&gt;::value_type &amp;ptocc : pointsToSets)</div>
336
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
337
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">const</span> PointsTo &amp;pt = ptocc.first;</div>
338
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptocc.second;</div>
339
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (pt.empty()) <span class="keywordflow">continue</span>;</div>
340
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// Guaranteed that begin() != end() because of the continue above. All objects in pt</span></div>
341
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// will be relevant to the same region.</span></div>
342
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordtype">unsigned</span> region = objectsRegion[*(pt.begin())];</div>
343
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// In our &quot;graph&quot;, objects in the same points-to set have an edge between them,</span></div>
344
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// so they are all in the same connected component/region.</span></div>
345
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; regionsPointsTos[region].push_back(std::make_pair(&amp;pt, occ));</div>
346
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
347
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; </div>
348
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
349
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; regioningTime = (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
350
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">RegioningTime</a>] = std::to_string(regioningTime);</div>
351
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">NumRegions</a>] = std::to_string(numRegions);</div>
352
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; </div>
353
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; std::vector&lt;hclust_fast_methods&gt; methods;</div>
354
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ac17ce6d75293dcd0baf366cbeb0cb6d6">Options::ClusterMethod</a>() == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a>)</div>
355
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
356
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a>);</div>
357
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a>);</div>
358
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a>);</div>
359
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div>
360
- <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">else</span></div>
361
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div>
362
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; methods.push_back(<a class="code" href="classSVF_1_1Options.html#ac17ce6d75293dcd0baf366cbeb0cb6d6">Options::ClusterMethod</a>());</div>
363
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
364
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; </div>
365
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <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>
366
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div>
367
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; std::vector&lt;NodeID&gt; nodeMap(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, UINT_MAX);</div>
368
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
369
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordtype">unsigned</span> numGtIntRegions = 0;</div>
370
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordtype">unsigned</span> largestRegion = 0;</div>
371
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordtype">unsigned</span> nonTrivialRegionObjects = 0;</div>
372
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordtype">unsigned</span> allocCounter = 0;</div>
373
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> region = 0; region &lt; numRegions; ++region)</div>
374
- <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div>
375
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> regionNumObjects = regionsObjects[region].size();</div>
376
- <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// Round up to next Word: ceiling of current allocation to get how</span></div>
377
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// many words and multiply to get the number of bits; if we&#39;re aligning.</span></div>
378
- <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a5a70a23e30df8dea3fcaf0e80479fe88">Options::RegionAlign</a>())</div>
379
- <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; {</div>
380
- <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; allocCounter =</div>
381
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; ((allocCounter + <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a> - 1) / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>) * <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div>
382
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div>
249
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// Map points-to sets to occurrences.</span></div>
250
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; Map&lt;PointsTo, unsigned&gt; pointsToSets;</div>
251
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
252
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// Objects each object shares at least a points-to set with.</span></div>
253
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; Map&lt;NodeID, Set&lt;NodeID&gt;&gt; coPointeeGraph;</div>
254
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair&lt;NodeID, unsigned&gt; &amp;keyOcc : keys)</div>
255
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
256
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">const</span> PointsTo &amp;pts = pta-&gt;getPts(keyOcc.first);</div>
257
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> oldSize = pointsToSets.size();</div>
258
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; pointsToSets[pts] += keyOcc.second;;</div>
259
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
260
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// Edges in this graph have no weight or uniqueness, so we only need to</span></div>
261
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// do this for each points-to set once.</span></div>
262
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">if</span> (oldSize != pointsToSets.size())</div>
263
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div>
264
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> firstO = !pts.empty() ? *(pts.begin()) : 0;</div>
265
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; Set&lt;NodeID&gt; &amp;firstOsNeighbours = coPointeeGraph[firstO];</div>
266
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
267
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div>
268
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (o != firstO)</div>
269
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
270
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; firstOsNeighbours.insert(o);</div>
271
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; coPointeeGraph[o].insert(firstO);</div>
272
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div>
273
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div>
274
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
275
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
276
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; </div>
277
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <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>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>;</div>
278
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afa74c5ccd22bebe0b76db33066d8b498">NumObjects</a>] = std::to_string(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>);</div>
279
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
280
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordtype">size_t</span> numRegions = 0;</div>
281
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; std::vector&lt;unsigned&gt; objectsRegion;</div>
282
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a8cc5b2a363724b558f4932277a87c0f6">Options::RegionedClustering</a>())</div>
283
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div>
284
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; objectsRegion = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a7d34542f34a8e8008119c3d61943daa2">regionObjects</a>(coPointeeGraph, <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, numRegions);</div>
285
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
286
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">else</span></div>
287
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div>
288
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// Just a single big region (0).</span></div>
289
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; objectsRegion.insert(objectsRegion.end(), <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, 0);</div>
290
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; numRegions = 1;</div>
291
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
292
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
293
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// Set needs to be ordered because getDistanceMatrix, in its n^2 iteration, expects</span></div>
294
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// sets to be ordered (we are building a condensed matrix, not a full matrix, so it</span></div>
295
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// matters). In getDistanceMatrix, doing regionReverseMapping for oi and oj, where</span></div>
296
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// oi &lt; oj, and getting a result moi &gt; moj gives incorrect results.</span></div>
297
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// In the condensed matrix, [b][a] where b &gt;= a, is incorrect.</span></div>
298
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; std::vector&lt;OrderedSet&lt;NodeID&gt;&gt; regionsObjects(numRegions);</div>
299
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = 0; o &lt; <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>; ++o) regionsObjects[objectsRegion[o]].insert(o);</div>
300
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
301
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// Size of the return node mapping. It is potentially larger than the number of</span></div>
302
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// objects because we align each region to NATIVE_INT_SIZE.</span></div>
303
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// size_t numMappings = 0;</span></div>
304
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; </div>
305
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// Maps a region to a mapping which maps 0 to n to all objects</span></div>
306
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// in that region.</span></div>
307
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; std::vector&lt;std::vector&lt;NodeID&gt;&gt; regionMappings(numRegions);</div>
308
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// The reverse: region to mapping of objects to a 0 to n from above.</span></div>
309
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; std::vector&lt;Map&lt;NodeID, unsigned&gt;&gt; regionReverseMappings(numRegions);</div>
310
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// We can thus use 0 to n for each region to create smaller distance matrices.</span></div>
311
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> region = 0; region &lt; numRegions; ++region)</div>
312
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div>
313
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordtype">size_t</span> curr = 0;</div>
314
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">// With the OrderedSet above, o1 &lt; o2 =&gt; map[o1] &lt; map[o2].</span></div>
315
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : regionsObjects[region])</div>
316
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div>
317
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// push_back here is just like p...[region][curr] = o.</span></div>
318
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; regionMappings[region].push_back(o);</div>
319
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; regionReverseMappings[region][o] = curr++;</div>
320
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
321
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
322
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// curr is the number of objects. A region with no objects makes no sense.</span></div>
323
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; assert(curr != 0);</div>
324
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; </div>
325
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="comment">// Number of bits needed for this region if we were</span></div>
326
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// to start assigning from 0 rounded up to the fewest needed</span></div>
327
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="comment">// native ints. This is added to the number of mappings since</span></div>
328
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// we align each region to a native int.</span></div>
329
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// numMappings += requiredBits(regionsObjects[region].size());</span></div>
330
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
331
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; </div>
332
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// Points-to sets which are relevant to a region, i.e., those whose elements</span></div>
333
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// belong to that region. Pair is for occurrences.</span></div>
334
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; std::vector&lt;std::vector&lt;std::pair&lt;const PointsTo *, unsigned&gt;&gt;&gt; regionsPointsTos(numRegions);</div>
335
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> Map&lt;PointsTo, unsigned&gt;::value_type &amp;ptocc : pointsToSets)</div>
336
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div>
337
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">const</span> PointsTo &amp;pt = ptocc.first;</div>
338
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptocc.second;</div>
339
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (pt.empty()) <span class="keywordflow">continue</span>;</div>
340
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// Guaranteed that begin() != end() because of the continue above. All objects in pt</span></div>
341
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// will be relevant to the same region.</span></div>
342
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordtype">unsigned</span> region = objectsRegion[*(pt.begin())];</div>
343
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// In our &quot;graph&quot;, objects in the same points-to set have an edge between them,</span></div>
344
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// so they are all in the same connected component/region.</span></div>
345
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; regionsPointsTos[region].push_back(std::make_pair(&amp;pt, occ));</div>
346
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
347
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; </div>
348
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
349
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; regioningTime = (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
350
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad5f733cad8a103a64e80270acb67567a">RegioningTime</a>] = std::to_string(regioningTime);</div>
351
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac5fe44f10cdbca9754444943a0f5c3c1">NumRegions</a>] = std::to_string(numRegions);</div>
352
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; </div>
353
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; std::vector&lt;hclust_fast_methods&gt; methods;</div>
354
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ac17ce6d75293dcd0baf366cbeb0cb6d6">Options::ClusterMethod</a>() == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a>)</div>
355
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
356
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a>);</div>
357
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a>);</div>
358
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; methods.push_back(<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a>);</div>
359
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
360
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">else</span></div>
361
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {</div>
362
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; methods.push_back(<a class="code" href="classSVF_1_1Options.html#ac17ce6d75293dcd0baf366cbeb0cb6d6">Options::ClusterMethod</a>());</div>
363
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
364
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; </div>
365
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <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>
366
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div>
367
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; std::vector&lt;NodeID&gt; nodeMap(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, UINT_MAX);</div>
368
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; </div>
369
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordtype">unsigned</span> numGtIntRegions = 0;</div>
370
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordtype">unsigned</span> largestRegion = 0;</div>
371
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordtype">unsigned</span> nonTrivialRegionObjects = 0;</div>
372
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordtype">unsigned</span> allocCounter = 0;</div>
373
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> region = 0; region &lt; numRegions; ++region)</div>
374
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
375
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> regionNumObjects = regionsObjects[region].size();</div>
376
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// Round up to next Word: ceiling of current allocation to get how</span></div>
377
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// many words and multiply to get the number of bits; if we&#39;re aligning.</span></div>
378
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a5a70a23e30df8dea3fcaf0e80479fe88">Options::RegionAlign</a>())</div>
379
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; {</div>
380
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; allocCounter =</div>
381
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; ((allocCounter + <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a> - 1) / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>) * <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div>
382
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
383
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; </div>
384
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">if</span> (regionNumObjects &gt; largestRegion) largestRegion = regionNumObjects;</div>
383
385
  <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
384
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">if</span> (regionNumObjects &gt; largestRegion) largestRegion = regionNumObjects;</div>
385
- <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
386
- <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// For regions with fewer than 64 objects, we can just allocate them</span></div>
387
- <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="comment">// however as they will be in the one int regardless..</span></div>
388
- <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (regionNumObjects &lt; <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>)</div>
389
- <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div>
390
- <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : regionsObjects[region]) nodeMap[o] = allocCounter++;</div>
391
- <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">continue</span>;</div>
392
- <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
393
- <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; </div>
394
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; ++numGtIntRegions;</div>
395
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; nonTrivialRegionObjects += regionNumObjects;</div>
396
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; </div>
397
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">double</span> *distMatrix = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#adf415d244ef1fafe7a7de3c360553c0f">getDistanceMatrix</a>(regionsPointsTos[region], regionNumObjects,</div>
398
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; regionReverseMappings[region], distanceMatrixTime);</div>
399
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; </div>
400
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
401
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordtype">int</span> *dendrogram = <span class="keyword">new</span> <span class="keywordtype">int</span>[2 * (regionNumObjects - 1)];</div>
402
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">double</span> *height = <span class="keyword">new</span> <span class="keywordtype">double</span>[regionNumObjects - 1];</div>
403
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="fastcluster_8h.html#acccd226cbdf0944b5c9e24c84a4599c9">hclust_fast</a>(regionNumObjects, distMatrix, method, dendrogram, height);</div>
404
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">delete</span>[] distMatrix;</div>
405
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keyword">delete</span>[] height;</div>
406
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
407
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; fastClusterTime += (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
408
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; </div>
409
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
410
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; Set&lt;int&gt; visited;</div>
411
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">traverseDendrogram</a>(nodeMap, dendrogram, regionNumObjects, allocCounter,</div>
412
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; visited, regionNumObjects - 1, regionMappings[region]);</div>
413
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">delete</span>[] dendrogram;</div>
414
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
415
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; dendrogramTraversalTime += (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
416
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
386
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="comment">// For regions with fewer than 64 objects, we can just allocate them</span></div>
387
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// however as they will be in the one int regardless..</span></div>
388
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">if</span> (regionNumObjects &lt; <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>)</div>
389
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div>
390
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : regionsObjects[region]) nodeMap[o] = allocCounter++;</div>
391
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">continue</span>;</div>
392
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div>
393
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; </div>
394
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; ++numGtIntRegions;</div>
395
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; nonTrivialRegionObjects += regionNumObjects;</div>
396
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; </div>
397
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordtype">double</span> *distMatrix = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#adf415d244ef1fafe7a7de3c360553c0f">getDistanceMatrix</a>(regionsPointsTos[region], regionNumObjects,</div>
398
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; regionReverseMappings[region], distanceMatrixTime);</div>
399
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; </div>
400
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
401
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordtype">int</span> *dendrogram = <span class="keyword">new</span> <span class="keywordtype">int</span>[2 * (regionNumObjects - 1)];</div>
402
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordtype">double</span> *height = <span class="keyword">new</span> <span class="keywordtype">double</span>[regionNumObjects - 1];</div>
403
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <a class="code" href="fastcluster_8h.html#acccd226cbdf0944b5c9e24c84a4599c9">hclust_fast</a>(regionNumObjects, distMatrix, method, dendrogram, height);</div>
404
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">delete</span>[] distMatrix;</div>
405
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keyword">delete</span>[] height;</div>
406
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
407
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; fastClusterTime += (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
408
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; </div>
409
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
410
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; Set&lt;int&gt; visited;</div>
411
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#abd44e3b07b0482bacf6b1a080fe650c6">traverseDendrogram</a>(nodeMap, dendrogram, regionNumObjects, allocCounter,</div>
412
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; visited, regionNumObjects - 1, regionMappings[region]);</div>
413
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">delete</span>[] dendrogram;</div>
414
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
415
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; dendrogramTraversalTime += (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
416
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div>
417
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; </div>
418
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; candidates.push_back(std::make_pair(method, nodeMap));</div>
417
419
  <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; </div>
418
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; candidates.push_back(std::make_pair(method, nodeMap));</div>
419
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; </div>
420
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="comment">// Though we &quot;update&quot; these in the loop, they will be the same every iteration.</span></div>
421
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad7cb36a1f0f67864fb8290e9dfd7b639">NumGtIntRegions</a>] = std::to_string(numGtIntRegions);</div>
422
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">LargestRegion</a>] = std::to_string(largestRegion);</div>
423
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">NumNonTrivialRegionObjects</a>] = std::to_string(nonTrivialRegionObjects);</div>
424
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</div>
425
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; </div>
426
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// Work out which of the mappings we generated looks best.</span></div>
427
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; std::pair&lt;hclust_fast_methods, std::vector&lt;NodeID&gt;&gt; bestMapping = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3f86e733cc075180e9682887c554b8fa">determineBestMapping</a>(candidates, pointsToSets,</div>
428
- <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; evalSubtitle, evalTime);</div>
429
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; </div>
430
- <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">DistanceMatrixTime</a>] = std::to_string(distanceMatrixTime);</div>
431
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">DendrogramTraversalTime</a>] = std::to_string(dendrogramTraversalTime);</div>
432
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">FastClusterTime</a>] = std::to_string(fastClusterTime);</div>
433
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">EvalTime</a>] = std::to_string(evalTime);</div>
434
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">TotalTime</a>] = std::to_string(distanceMatrixTime + dendrogramTraversalTime + fastClusterTime + regioningTime + evalTime);</div>
435
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; </div>
436
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; 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>
437
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">printStats</a>(evalSubtitle + <span class="stringliteral">&quot;: overall&quot;</span>, overallStats);</div>
438
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; </div>
439
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">return</span> bestMapping.second;</div>
440
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;}</div>
420
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">// Though we &quot;update&quot; these in the loop, they will be the same every iteration.</span></div>
421
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ad7cb36a1f0f67864fb8290e9dfd7b639">NumGtIntRegions</a>] = std::to_string(numGtIntRegions);</div>
422
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a172d72ae4ae45fa2baf2f20ff2b499dc">LargestRegion</a>] = std::to_string(largestRegion);</div>
423
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1bf9461c717e8dabaee6a57f3d76d61f">NumNonTrivialRegionObjects</a>] = std::to_string(nonTrivialRegionObjects);</div>
424
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; }</div>
425
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
426
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// Work out which of the mappings we generated looks best.</span></div>
427
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; std::pair&lt;hclust_fast_methods, std::vector&lt;NodeID&gt;&gt; bestMapping = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a3f86e733cc075180e9682887c554b8fa">determineBestMapping</a>(candidates, pointsToSets,</div>
428
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; evalSubtitle, evalTime);</div>
429
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; </div>
430
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">DistanceMatrixTime</a>] = std::to_string(distanceMatrixTime);</div>
431
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a67ab9cffacc1584b2e7bae5d1b08c541">DendrogramTraversalTime</a>] = std::to_string(dendrogramTraversalTime);</div>
432
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ae78d2b60035350c634f6f58d7a043c22">FastClusterTime</a>] = std::to_string(fastClusterTime);</div>
433
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856">EvalTime</a>] = std::to_string(evalTime);</div>
434
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; overallStats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">TotalTime</a>] = std::to_string(distanceMatrixTime + dendrogramTraversalTime + fastClusterTime + regioningTime + evalTime);</div>
435
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; </div>
436
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; 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>
437
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">printStats</a>(evalSubtitle + <span class="stringliteral">&quot;: overall&quot;</span>, overallStats);</div>
438
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; </div>
439
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">return</span> bestMapping.second;</div>
440
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;}</div>
441
441
  </div><!-- fragment -->
442
442
  </div>
443
443
  </div>
@@ -482,11 +482,11 @@ Static Private Attributes</h2></td></tr>
482
482
  </div><div class="memdoc">
483
483
  <p>Returns an index into a condensed matrix (upper triangle, excluding diagonals) corresponding to an nxn matrix. </p>
484
484
 
485
- <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>
486
- <div class="fragment"><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;{</div>
487
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// From https://stackoverflow.com/a/14839010</span></div>
488
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>*(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>-1)/2 - (<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>-i)*(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>-i-1)/2 + j - i - 1;</div>
489
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;}</div>
485
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00411">411</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
486
+ <div class="fragment"><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;{</div>
487
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// From https://stackoverflow.com/a/14839010</span></div>
488
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>*(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>-1)/2 - (<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>-i)*(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>-i-1)/2 + j - i - 1;</div>
489
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;}</div>
490
490
  </div><!-- fragment -->
491
491
  </div>
492
492
  </div>
@@ -536,43 +536,43 @@ Static Private Attributes</h2></td></tr>
536
536
  </table>
537
537
  </div><div class="memdoc">
538
538
 
539
- <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>
540
- <div class="fragment"><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;{</div>
541
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="comment">// In case we&#39;re not comparing anything, set to first &quot;candidate&quot;.</span></div>
542
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; std::pair&lt;hclust_fast_methods, std::vector&lt;NodeID&gt;&gt; bestMapping = candidates[0];</div>
543
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// Number of bits required for the best candidate.</span></div>
544
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordtype">size_t</span> bestWords = std::numeric_limits&lt;size_t&gt;::max();</div>
545
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">if</span> (evalSubtitle != <span class="stringliteral">&quot;&quot;</span> || <a class="code" href="classSVF_1_1Options.html#ac17ce6d75293dcd0baf366cbeb0cb6d6">Options::ClusterMethod</a>() == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a>)</div>
546
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div>
547
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair&lt;<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a>, std::vector&lt;NodeID&gt;&gt; &amp;candidate : candidates)</div>
548
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; {</div>
549
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; Map&lt;std::string, std::string&gt; candidateStats;</div>
550
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a> candidateMethod = candidate.first;</div>
551
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> candidateMethodName = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVFUtil::hclustMethodToString</a>(candidateMethod);</div>
552
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; std::vector&lt;NodeID&gt; candidateMapping = candidate.second;</div>
553
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; </div>
554
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="comment">// TODO: parameterise final arg.</span></div>
555
- <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keyword">const</span> <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
556
- <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">evaluate</a>(candidateMapping, pointsToSets, candidateStats, <span class="keyword">true</span>);</div>
557
- <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keyword">const</span> <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
558
- <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; evalTime += (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
559
- <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">printStats</a>(evalSubtitle + <span class="stringliteral">&quot;: candidate &quot;</span> + candidateMethodName, candidateStats);</div>
560
- <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; </div>
561
- <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordtype">size_t</span> candidateWords = 0;</div>
562
- <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a595a98babd7d51af6dacd935bd27d1f0">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>
563
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a595a98babd7d51af6dacd935bd27d1f0">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>
564
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Clusterer::cluster: unsupported BV type for clustering.&quot;</span>);</div>
565
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; </div>
566
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">if</span> (candidateWords &lt; bestWords)</div>
567
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div>
568
- <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; bestWords = candidateWords;</div>
569
- <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; bestMapping = candidate;</div>
570
- <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</div>
571
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div>
572
- <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div>
573
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; </div>
574
- <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">return</span> bestMapping;</div>
575
- <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;}</div>
539
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00650">650</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
540
+ <div class="fragment"><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;{</div>
541
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// In case we&#39;re not comparing anything, set to first &quot;candidate&quot;.</span></div>
542
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; std::pair&lt;hclust_fast_methods, std::vector&lt;NodeID&gt;&gt; bestMapping = candidates[0];</div>
543
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="comment">// Number of bits required for the best candidate.</span></div>
544
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordtype">size_t</span> bestWords = std::numeric_limits&lt;size_t&gt;::max();</div>
545
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">if</span> (evalSubtitle != <span class="stringliteral">&quot;&quot;</span> || <a class="code" href="classSVF_1_1Options.html#ac17ce6d75293dcd0baf366cbeb0cb6d6">Options::ClusterMethod</a>() == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a>)</div>
546
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; {</div>
547
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair&lt;<a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a>, std::vector&lt;NodeID&gt;&gt; &amp;candidate : candidates)</div>
548
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div>
549
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; Map&lt;std::string, std::string&gt; candidateStats;</div>
550
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a> candidateMethod = candidate.first;</div>
551
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> candidateMethodName = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a14a4c5124f2fd03ca3d898e2acd54160">SVFUtil::hclustMethodToString</a>(candidateMethod);</div>
552
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; std::vector&lt;NodeID&gt; candidateMapping = candidate.second;</div>
553
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; </div>
554
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="comment">// TODO: parameterise final arg.</span></div>
555
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keyword">const</span> <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
556
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">evaluate</a>(candidateMapping, pointsToSets, candidateStats, <span class="keyword">true</span>);</div>
557
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keyword">const</span> <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
558
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; evalTime += (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
559
+ <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">printStats</a>(evalSubtitle + <span class="stringliteral">&quot;: candidate &quot;</span> + candidateMethodName, candidateStats);</div>
560
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; </div>
561
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordtype">size_t</span> candidateWords = 0;</div>
562
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a595a98babd7d51af6dacd935bd27d1f0">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>
563
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a595a98babd7d51af6dacd935bd27d1f0">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>
564
+ <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">else</span> assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Clusterer::cluster: unsupported BV type for clustering.&quot;</span>);</div>
565
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; </div>
566
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">if</span> (candidateWords &lt; bestWords)</div>
567
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; {</div>
568
+ <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; bestWords = candidateWords;</div>
569
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; bestMapping = candidate;</div>
570
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; }</div>
571
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
572
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</div>
573
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; </div>
574
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">return</span> bestMapping;</div>
575
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;}</div>
576
576
  </div><!-- fragment -->
577
577
  </div>
578
578
  </div>
@@ -624,82 +624,82 @@ Static Private Attributes</h2></td></tr>
624
624
 
625
625
  <p>Fills in *NumWords statistics in stats.. </p>
626
626
 
627
- <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>
628
- <div class="fragment"><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;{</div>
629
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalTheoretical = 0;</div>
630
- <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalOriginalSbv = 0;</div>
631
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalOriginalBv = 0;</div>
632
- <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalNewSbv = 0;</div>
633
- <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalNewBv = 0;</div>
634
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; </div>
635
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> Map&lt;PointsTo, unsigned&gt;::value_type &amp;ptsOcc : pointsToSets)</div>
636
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; {</div>
637
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keyword">const</span> PointsTo &amp;pts = ptsOcc.first;</div>
638
- <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptsOcc.second;</div>
639
- <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">if</span> (pts.count() == 0) <span class="keywordflow">continue</span>;</div>
640
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; </div>
641
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <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="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div>
642
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">if</span> (accountForOcc) theoretical *= occ;</div>
643
- <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; </div>
644
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// Check number of words for original SBV.</span></div>
645
- <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; Set&lt;unsigned&gt; words;</div>
646
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// TODO: nasty hardcoding.</span></div>
647
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <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>
648
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> originalSbv = words.size() * 2;</div>
649
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">if</span> (accountForOcc) originalSbv *= occ;</div>
650
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; </div>
651
- <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">// Check number of words for original BV.</span></div>
652
- <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> min = UINT_MAX;</div>
653
- <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> max = 0;</div>
654
- <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
655
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; {</div>
656
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">if</span> (o &lt; min) min = o;</div>
657
- <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">if</span> (o &gt; max) max = o;</div>
658
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div>
659
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; words.clear();</div>
660
- <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> = min; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> &lt;= max; ++<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>)</div>
661
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; {</div>
662
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; words.insert(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>);</div>
663
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; }</div>
664
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> originalBv = words.size();</div>
665
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">if</span> (accountForOcc) originalBv *= occ;</div>
666
- <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; </div>
667
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// Check number of words for new SBV.</span></div>
668
- <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; words.clear();</div>
669
- <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">// TODO: nasty hardcoding.</span></div>
670
- <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <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>
671
- <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> newSbv = words.size() * 2;</div>
672
- <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">if</span> (accountForOcc) newSbv *= occ;</div>
673
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; </div>
674
- <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">// Check number of words for new BV.</span></div>
675
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; min = UINT_MAX;</div>
676
- <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; max = 0;</div>
677
- <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
678
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; {</div>
679
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> mappedO = nodeMap[o];</div>
680
- <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">if</span> (mappedO &lt; min) min = mappedO;</div>
681
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">if</span> (mappedO &gt; max) max = mappedO;</div>
682
- <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div>
683
- <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; </div>
684
- <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; words.clear();</div>
685
- <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="comment">// No nodeMap[b] because min and max and from nodeMap.</span></div>
686
- <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> = min; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> &lt;= max; ++<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>) words.insert(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>);</div>
687
- <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> newBv = words.size();</div>
688
- <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (accountForOcc) newBv *= occ;</div>
689
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
690
- <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; totalTheoretical += theoretical;</div>
691
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; totalOriginalSbv += originalSbv;</div>
692
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; totalOriginalBv += originalBv;</div>
693
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; totalNewSbv += newSbv;</div>
694
- <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; totalNewBv += newBv;</div>
695
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div>
696
- <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; </div>
697
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">TheoreticalNumWords</a>] = std::to_string(totalTheoretical);</div>
698
- <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">OriginalSbvNumWords</a>] = std::to_string(totalOriginalSbv);</div>
699
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">OriginalBvNumWords</a>] = std::to_string(totalOriginalBv);</div>
700
- <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">NewSbvNumWords</a>] = std::to_string(totalNewSbv);</div>
701
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">NewBvNumWords</a>] = std::to_string(totalNewBv);</div>
702
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;}</div>
627
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00572">572</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
628
+ <div class="fragment"><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;{</div>
629
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalTheoretical = 0;</div>
630
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalOriginalSbv = 0;</div>
631
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalOriginalBv = 0;</div>
632
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalNewSbv = 0;</div>
633
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> totalNewBv = 0;</div>
634
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; </div>
635
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> Map&lt;PointsTo, unsigned&gt;::value_type &amp;ptsOcc : pointsToSets)</div>
636
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; {</div>
637
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keyword">const</span> PointsTo &amp;pts = ptsOcc.first;</div>
638
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptsOcc.second;</div>
639
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">if</span> (pts.count() == 0) <span class="keywordflow">continue</span>;</div>
640
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; </div>
641
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <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="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div>
642
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">if</span> (accountForOcc) theoretical *= occ;</div>
643
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; </div>
644
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">// Check number of words for original SBV.</span></div>
645
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; Set&lt;unsigned&gt; words;</div>
646
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// TODO: nasty hardcoding.</span></div>
647
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <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>
648
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> originalSbv = words.size() * 2;</div>
649
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">if</span> (accountForOcc) originalSbv *= occ;</div>
650
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; </div>
651
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="comment">// Check number of words for original BV.</span></div>
652
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> min = UINT_MAX;</div>
653
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> max = 0;</div>
654
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
655
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; {</div>
656
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span> (o &lt; min) min = o;</div>
657
+ <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">if</span> (o &gt; max) max = o;</div>
658
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div>
659
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; words.clear();</div>
660
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> = min; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> &lt;= max; ++<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>)</div>
661
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; {</div>
662
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; words.insert(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>);</div>
663
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div>
664
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> originalBv = words.size();</div>
665
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">if</span> (accountForOcc) originalBv *= occ;</div>
666
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; </div>
667
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// Check number of words for new SBV.</span></div>
668
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; words.clear();</div>
669
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// TODO: nasty hardcoding.</span></div>
670
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <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>
671
+ <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> newSbv = words.size() * 2;</div>
672
+ <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">if</span> (accountForOcc) newSbv *= occ;</div>
673
+ <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; </div>
674
+ <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">// Check number of words for new BV.</span></div>
675
+ <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; min = UINT_MAX;</div>
676
+ <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; max = 0;</div>
677
+ <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
678
+ <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; {</div>
679
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> mappedO = nodeMap[o];</div>
680
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">if</span> (mappedO &lt; min) min = mappedO;</div>
681
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">if</span> (mappedO &gt; max) max = mappedO;</div>
682
+ <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; }</div>
683
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; </div>
684
+ <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; words.clear();</div>
685
+ <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="comment">// No nodeMap[b] because min and max and from nodeMap.</span></div>
686
+ <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> = min; <a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> &lt;= max; ++<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a>) words.insert(<a class="code" href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a> / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>);</div>
687
+ <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="namespaceSVF.html#a366625858f450a1ea5f985a3c83e0f14">u64_t</a> newBv = words.size();</div>
688
+ <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">if</span> (accountForOcc) newBv *= occ;</div>
689
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; </div>
690
+ <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; totalTheoretical += theoretical;</div>
691
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; totalOriginalSbv += originalSbv;</div>
692
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; totalOriginalBv += originalBv;</div>
693
+ <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; totalNewSbv += newSbv;</div>
694
+ <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; totalNewBv += newBv;</div>
695
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div>
696
+ <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; </div>
697
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a2a70b98363303cb33d96732f44b4c5c3">TheoreticalNumWords</a>] = std::to_string(totalTheoretical);</div>
698
+ <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a639b887e30115c2a6cd108c65f18fcc1">OriginalSbvNumWords</a>] = std::to_string(totalOriginalSbv);</div>
699
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af2786eae11ee13845da336ad23bc97e9">OriginalBvNumWords</a>] = std::to_string(totalOriginalBv);</div>
700
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a779446e2fe92518401f1732fb809f066">NewSbvNumWords</a>] = std::to_string(totalNewSbv);</div>
701
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; stats[<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#af3fe4b4098898ee38928c9db30ea0fe9">NewBvNumWords</a>] = std::to_string(totalNewBv);</div>
702
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;}</div>
703
703
  </div><!-- fragment -->
704
704
  </div>
705
705
  </div>
@@ -750,74 +750,74 @@ Static Private Attributes</h2></td></tr>
750
750
  </div><div class="memdoc">
751
751
  <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>
752
752
 
753
- <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>
754
- <div class="fragment"><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;{</div>
755
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keyword">const</span> <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
756
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <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>
757
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordtype">double</span> *distMatrix = <span class="keyword">new</span> <span class="keywordtype">double</span>[condensedSize];</div>
758
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 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>
759
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; </div>
760
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">// TODO: maybe use machine epsilon?</span></div>
761
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// For reducing distance due to extra occurrences.</span></div>
762
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="comment">// Can differentiate ~9999 occurrences.</span></div>
763
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordtype">double</span> occurrenceEpsilon = 0.0001;</div>
764
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; </div>
765
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair&lt;const PointsTo *, unsigned&gt; &amp;ptsOcc : pointsToSets)</div>
766
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; {</div>
767
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">const</span> PointsTo *pts = ptsOcc.first;</div>
768
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; assert(pts != <span class="keyword">nullptr</span>);</div>
769
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptsOcc.second;</div>
770
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; </div>
771
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// Distance between each element of pts.</span></div>
772
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordtype">unsigned</span> distance = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(*pts) / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div>
773
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; </div>
774
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="comment">// Use a vector so we can index into pts.</span></div>
775
- <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; std::vector&lt;NodeID&gt; ptsVec;</div>
776
- <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <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>
777
- <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; ptsVec.size(); ++i)</div>
778
- <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div>
779
- <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oi = ptsVec[i];</div>
780
- <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keyword">const</span> Map&lt;NodeID, unsigned&gt;::const_iterator moi = nodeMap.find(oi);</div>
781
- <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; assert(moi != nodeMap.end());</div>
782
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = i + 1; j &lt; ptsVec.size(); ++j)</div>
783
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div>
784
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oj = ptsVec[j];</div>
785
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">const</span> Map&lt;NodeID, unsigned&gt;::const_iterator moj = nodeMap.find(oj);</div>
786
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; assert(moj != nodeMap.end());</div>
787
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordtype">double</span> &amp;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-&gt;second, moj-&gt;second)];</div>
788
- <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; </div>
789
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">// Subtract extra occurrenceEpsilon to make upcoming logic simpler.</span></div>
790
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="comment">// When existingDistance is never whole, it is always between two distances.</span></div>
791
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">if</span> (distance &lt; existingDistance) existingDistance = distance - occurrenceEpsilon;</div>
792
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; </div>
793
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">if</span> (distance == std::ceil(existingDistance))</div>
794
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; {</div>
795
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// We have something like distance == x, existingDistance == x - e, for some e &lt; 1</span></div>
796
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// (potentially even set during this iteration).</span></div>
797
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// So, the new distance is an occurrence the existingDistance being tracked, it just</span></div>
798
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// had some reductions because of multiple occurrences.</span></div>
799
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="comment">// If there is not room within this distance to reduce more (increase priority),</span></div>
800
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// just ignore it. TODO: maybe warn?</span></div>
801
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (existingDistance - occ * occurrenceEpsilon &gt; std::floor(existingDistance))</div>
802
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div>
803
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; existingDistance -= occ * occurrenceEpsilon;</div>
804
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div>
805
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">else</span></div>
806
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div>
807
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">// Reached minimum.</span></div>
808
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; existingDistance = std::floor(existingDistance) + occurrenceEpsilon;</div>
809
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div>
810
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div>
811
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div>
812
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div>
753
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00430">430</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
754
+ <div class="fragment"><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;{</div>
755
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keyword">const</span> <span class="keywordtype">double</span> clkStart = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
756
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <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>
757
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordtype">double</span> *distMatrix = <span class="keyword">new</span> <span class="keywordtype">double</span>[condensedSize];</div>
758
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 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>
759
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; </div>
760
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="comment">// TODO: maybe use machine epsilon?</span></div>
761
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// For reducing distance due to extra occurrences.</span></div>
762
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">// Can differentiate ~9999 occurrences.</span></div>
763
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordtype">double</span> occurrenceEpsilon = 0.0001;</div>
764
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; </div>
765
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair&lt;const PointsTo *, unsigned&gt; &amp;ptsOcc : pointsToSets)</div>
766
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div>
767
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">const</span> PointsTo *pts = ptsOcc.first;</div>
768
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; assert(pts != <span class="keyword">nullptr</span>);</div>
769
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> occ = ptsOcc.second;</div>
770
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; </div>
771
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// Distance between each element of pts.</span></div>
772
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordtype">unsigned</span> distance = <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(*pts) / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div>
773
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; </div>
774
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="comment">// Use a vector so we can index into pts.</span></div>
775
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; std::vector&lt;NodeID&gt; ptsVec;</div>
776
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <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>
777
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; ptsVec.size(); ++i)</div>
778
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; {</div>
779
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oi = ptsVec[i];</div>
780
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keyword">const</span> Map&lt;NodeID, unsigned&gt;::const_iterator moi = nodeMap.find(oi);</div>
781
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; assert(moi != nodeMap.end());</div>
782
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = i + 1; j &lt; ptsVec.size(); ++j)</div>
783
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div>
784
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oj = ptsVec[j];</div>
785
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keyword">const</span> Map&lt;NodeID, unsigned&gt;::const_iterator moj = nodeMap.find(oj);</div>
786
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; assert(moj != nodeMap.end());</div>
787
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordtype">double</span> &amp;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-&gt;second, moj-&gt;second)];</div>
788
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; </div>
789
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// Subtract extra occurrenceEpsilon to make upcoming logic simpler.</span></div>
790
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="comment">// When existingDistance is never whole, it is always between two distances.</span></div>
791
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (distance &lt; existingDistance) existingDistance = distance - occurrenceEpsilon;</div>
792
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; </div>
793
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">if</span> (distance == std::ceil(existingDistance))</div>
794
+ <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; {</div>
795
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="comment">// We have something like distance == x, existingDistance == x - e, for some e &lt; 1</span></div>
796
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="comment">// (potentially even set during this iteration).</span></div>
797
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// So, the new distance is an occurrence the existingDistance being tracked, it just</span></div>
798
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// had some reductions because of multiple occurrences.</span></div>
799
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// If there is not room within this distance to reduce more (increase priority),</span></div>
800
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// just ignore it. TODO: maybe warn?</span></div>
801
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">if</span> (existingDistance - occ * occurrenceEpsilon &gt; std::floor(existingDistance))</div>
802
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div>
803
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; existingDistance -= occ * occurrenceEpsilon;</div>
804
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div>
805
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">else</span></div>
806
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; {</div>
807
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// Reached minimum.</span></div>
808
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; existingDistance = std::floor(existingDistance) + occurrenceEpsilon;</div>
809
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div>
810
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; }</div>
811
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div>
812
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div>
813
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
814
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div>
813
815
  <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; </div>
814
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</div>
815
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; </div>
816
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">const</span> <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
817
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; distanceMatrixTime += (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
818
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; </div>
819
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">return</span> distMatrix;</div>
820
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;}</div>
816
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">const</span> <span class="keywordtype">double</span> clkEnd = <a class="code" href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">PTAStat::getClk</a>(<span class="keyword">true</span>);</div>
817
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; distanceMatrixTime += (clkEnd - clkStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
818
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; </div>
819
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> distMatrix;</div>
820
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;}</div>
821
821
  </div><!-- fragment -->
822
822
  </div>
823
823
  </div>
@@ -845,19 +845,19 @@ Static Private Attributes</h2></td></tr>
845
845
  </table>
846
846
  </div><div class="memdoc">
847
847
 
848
- <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>
849
- <div class="fragment"><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;{</div>
850
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">// nodeMapping.size() may not be big enough because we leave some gaps, but it&#39;s a start.</span></div>
851
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; std::vector&lt;NodeID&gt; reverseNodeMapping(nodeMapping.size(), UINT_MAX);</div>
852
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; nodeMapping.size(); ++i)</div>
853
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div>
854
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> mapsTo = nodeMapping.at(i);</div>
855
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">if</span> (mapsTo &gt;= reverseNodeMapping.size()) reverseNodeMapping.resize(mapsTo + 1, UINT_MAX);</div>
856
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; reverseNodeMapping.at(mapsTo) = i;</div>
857
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div>
858
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; </div>
859
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">return</span> reverseNodeMapping;</div>
860
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;}</div>
848
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00397">397</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
849
+ <div class="fragment"><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;{</div>
850
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">// nodeMapping.size() may not be big enough because we leave some gaps, but it&#39;s a start.</span></div>
851
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; std::vector&lt;NodeID&gt; reverseNodeMapping(nodeMapping.size(), UINT_MAX);</div>
852
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; nodeMapping.size(); ++i)</div>
853
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div>
854
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> mapsTo = nodeMapping.at(i);</div>
855
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span> (mapsTo &gt;= reverseNodeMapping.size()) reverseNodeMapping.resize(mapsTo + 1, UINT_MAX);</div>
856
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; reverseNodeMapping.at(mapsTo) = i;</div>
857
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div>
858
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
859
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">return</span> reverseNodeMapping;</div>
860
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;}</div>
861
861
  </div><!-- fragment -->
862
862
  </div>
863
863
  </div>
@@ -896,32 +896,32 @@ Static Private Attributes</h2></td></tr>
896
896
  </div><div class="memdoc">
897
897
  <p>Prints statistics to <a class="el" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61" title="Overwrite llvm::outs()">SVFUtil::outs()</a>. TODO: make stats const. </p>
898
898
 
899
- <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>
900
- <div class="fragment"><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;{</div>
901
- <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <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>
902
- <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> statKeys[] =</div>
903
- <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; {</div>
904
- <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <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>
905
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <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>
906
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <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>
907
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <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>
908
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <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>
909
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; };</div>
910
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; </div>
911
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> fieldWidth = 20;</div>
912
- <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flags(std::ios::left);</div>
913
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;****Clusterer Statistics: &quot;</span> &lt;&lt; subtitle &lt;&lt; <span class="stringliteral">&quot;****\n&quot;</span>;</div>
914
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; statKey : statKeys)</div>
915
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div>
916
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; Map&lt;std::string, std::string&gt;::const_iterator stat = stats.find(statKey);</div>
917
- <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">if</span> (stat != stats.end())</div>
918
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; {</div>
919
- <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; std::setw(fieldWidth) &lt;&lt; statKey &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; stat-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
920
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; }</div>
921
- <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; }</div>
922
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; </div>
923
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div>
924
- <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;}</div>
899
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00690">690</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
900
+ <div class="fragment"><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;{</div>
901
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <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>
902
+ <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> statKeys[] =</div>
903
+ <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; {</div>
904
+ <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <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>
905
+ <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <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>
906
+ <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <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>
907
+ <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <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>
908
+ <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <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>
909
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; };</div>
910
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; </div>
911
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> fieldWidth = 20;</div>
912
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flags(std::ios::left);</div>
913
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;****Clusterer Statistics: &quot;</span> &lt;&lt; subtitle &lt;&lt; <span class="stringliteral">&quot;****\n&quot;</span>;</div>
914
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; statKey : statKeys)</div>
915
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div>
916
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; Map&lt;std::string, std::string&gt;::const_iterator stat = stats.find(statKey);</div>
917
+ <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">if</span> (stat != stats.end())</div>
918
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; {</div>
919
+ <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; std::setw(fieldWidth) &lt;&lt; statKey &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; stat-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
920
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
921
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; }</div>
922
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; </div>
923
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div>
924
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;}</div>
925
925
  </div><!-- fragment -->
926
926
  </div>
927
927
  </div>
@@ -967,45 +967,45 @@ Static Private Attributes</h2></td></tr>
967
967
  <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
968
968
  points-to set" is encoded by graph which is an adjacency list ensuring that x in pt(p) and y in pt(p) -&gt; x is reachable from y. </p>
969
969
 
970
- <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>
971
- <div class="fragment"><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;{</div>
972
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordtype">unsigned</span> label = UINT_MAX;</div>
973
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; std::vector&lt;NodeID&gt; labels(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, UINT_MAX);</div>
974
- <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; Set&lt;NodeID&gt; labelled;</div>
975
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, Set&lt;NodeID&gt;&gt;::value_type &amp;oos : graph)</div>
976
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; {</div>
977
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = oos.first;</div>
978
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span> (labels[o] != UINT_MAX) <span class="keywordflow">continue</span>;</div>
979
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; std::queue&lt;NodeID&gt; bfsQueue;</div>
980
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; bfsQueue.push(o);</div>
981
- <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; ++label;</div>
982
- <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">while</span> (!bfsQueue.empty())</div>
983
- <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {</div>
984
- <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = bfsQueue.front();</div>
985
- <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; bfsQueue.pop();</div>
986
- <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">if</span> (labels[o] != UINT_MAX)</div>
987
- <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; {</div>
988
- <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; assert(labels[o] == label);</div>
989
- <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">continue</span>;</div>
990
- <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div>
991
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; </div>
992
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; labels[o] = label;</div>
993
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; Map&lt;NodeID, Set&lt;NodeID&gt;&gt;::const_iterator neighboursIt = graph.find(o);</div>
994
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; assert(neighboursIt != graph.end());</div>
995
- <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> neighbour : neighboursIt-&gt;second) bfsQueue.push(neighbour);</div>
996
- <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div>
997
- <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; }</div>
998
- <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; </div>
999
- <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="comment">// The remaining objects have no relation with others: they get their own label.</span></div>
1000
- <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> o = 0; o &lt; <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>; ++o)</div>
1001
- <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div>
1002
- <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">if</span> (labels[o] == UINT_MAX) labels[o] = ++label;</div>
1003
- <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; }</div>
970
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00532">532</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
971
+ <div class="fragment"><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;{</div>
972
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordtype">unsigned</span> label = UINT_MAX;</div>
973
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; std::vector&lt;NodeID&gt; labels(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>, UINT_MAX);</div>
974
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; Set&lt;NodeID&gt; labelled;</div>
975
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, Set&lt;NodeID&gt;&gt;::value_type &amp;oos : graph)</div>
976
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; {</div>
977
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = oos.first;</div>
978
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">if</span> (labels[o] != UINT_MAX) <span class="keywordflow">continue</span>;</div>
979
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; std::queue&lt;NodeID&gt; bfsQueue;</div>
980
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; bfsQueue.push(o);</div>
981
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; ++label;</div>
982
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">while</span> (!bfsQueue.empty())</div>
983
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
984
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = bfsQueue.front();</div>
985
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; bfsQueue.pop();</div>
986
+ <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">if</span> (labels[o] != UINT_MAX)</div>
987
+ <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; {</div>
988
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; assert(labels[o] == label);</div>
989
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">continue</span>;</div>
990
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
991
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; </div>
992
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; labels[o] = label;</div>
993
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; Map&lt;NodeID, Set&lt;NodeID&gt;&gt;::const_iterator neighboursIt = graph.find(o);</div>
994
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; assert(neighboursIt != graph.end());</div>
995
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> neighbour : neighboursIt-&gt;second) bfsQueue.push(neighbour);</div>
996
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
997
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div>
998
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; </div>
999
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">// The remaining objects have no relation with others: they get their own label.</span></div>
1000
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> o = 0; o &lt; <a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a>; ++o)</div>
1001
+ <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; {</div>
1002
+ <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (labels[o] == UINT_MAX) labels[o] = ++label;</div>
1003
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div>
1004
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div>
1005
+ <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; numLabels = label + 1;</div>
1004
1006
  <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; </div>
1005
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; numLabels = label + 1;</div>
1006
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; </div>
1007
- <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">return</span> labels;</div>
1008
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;}</div>
1007
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">return</span> labels;</div>
1008
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;}</div>
1009
1009
  </div><!-- fragment -->
1010
1010
  </div>
1011
1011
  </div>
@@ -1035,10 +1035,10 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1035
1035
 
1036
1036
  <p>Returns the minimum number of bits required to represent pts in a perfect world. </p>
1037
1037
 
1038
- <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>
1039
- <div class="fragment"><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;{</div>
1040
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(pts.count());</div>
1041
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;}</div>
1038
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00417">417</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
1039
+ <div class="fragment"><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;{</div>
1040
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a9aea96839c51ac1e2cbf4813174bb21c">requiredBits</a>(pts.count());</div>
1041
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;}</div>
1042
1042
  </div><!-- fragment -->
1043
1043
  </div>
1044
1044
  </div>
@@ -1068,13 +1068,13 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1068
1068
 
1069
1069
  <p>Returns the minimum number of bits required to represent n items in a perfect world. </p>
1070
1070
 
1071
- <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>
1072
- <div class="fragment"><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;{</div>
1073
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> == 0) <span class="keywordflow">return</span> 0;</div>
1074
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="comment">// Ceiling of number of bits amongst each native integer gives needed native ints,</span></div>
1075
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="comment">// so we then multiply again by the number of bits in each native int.</span></div>
1076
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> ((<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> - 1) / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a> + 1) * <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div>
1077
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;}</div>
1071
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00422">422</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
1072
+ <div class="fragment"><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;{</div>
1073
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> == 0) <span class="keywordflow">return</span> 0;</div>
1074
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="comment">// Ceiling of number of bits amongst each native integer gives needed native ints,</span></div>
1075
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="comment">// so we then multiply again by the number of bits in each native int.</span></div>
1076
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">return</span> ((<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a> - 1) / <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a> + 1) * <a class="code" href="SVFType_8h.html#ab8ca0fd9d0caa6817d305cae0f1cf022">NATIVE_INT_SIZE</a>;</div>
1077
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;}</div>
1078
1078
  </div><!-- fragment -->
1079
1079
  </div>
1080
1080
  </div>
@@ -1143,36 +1143,36 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1143
1143
  </div><div class="memdoc">
1144
1144
  <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>
1145
1145
 
1146
- <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>
1147
- <div class="fragment"><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;{</div>
1148
- <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span> (visited.find(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>) != visited.end()) <span class="keywordflow">return</span>;</div>
1149
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; visited.insert(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1150
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; </div>
1151
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordtype">int</span> left = dendrogram[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> - 1];</div>
1152
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">if</span> (left &lt; 0)</div>
1153
- <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; {</div>
1154
- <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="comment">// Reached a leaf.</span></div>
1155
- <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="comment">// -1 because the items start from 1 per fastcluster (TODO).</span></div>
1156
- <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; nodeMap[regionNodeMap[std::abs(left) - 1]] = allocCounter;</div>
1157
- <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; ++allocCounter;</div>
1158
- <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div>
1159
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">else</span></div>
1160
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div>
1161
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <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>
1162
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div>
1163
- <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; </div>
1164
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// Repeat for the right child.</span></div>
1165
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordtype">int</span> right = dendrogram[(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> - 1) + <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> - 1];</div>
1166
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">if</span> (right &lt; 0)</div>
1167
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; {</div>
1168
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; nodeMap[regionNodeMap[std::abs(right) - 1]] = allocCounter;</div>
1169
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; ++allocCounter;</div>
1170
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div>
1171
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">else</span></div>
1172
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div>
1173
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <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>
1174
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div>
1175
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;}</div>
1146
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8cpp_source.html#l00501">501</a> of file <a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a>.</p>
1147
+ <div class="fragment"><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;{</div>
1148
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (visited.find(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>) != visited.end()) <span class="keywordflow">return</span>;</div>
1149
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; visited.insert(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>);</div>
1150
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; </div>
1151
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordtype">int</span> left = dendrogram[<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> - 1];</div>
1152
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">if</span> (left &lt; 0)</div>
1153
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div>
1154
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="comment">// Reached a leaf.</span></div>
1155
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">// -1 because the items start from 1 per fastcluster (TODO).</span></div>
1156
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; nodeMap[regionNodeMap[std::abs(left) - 1]] = allocCounter;</div>
1157
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; ++allocCounter;</div>
1158
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div>
1159
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">else</span></div>
1160
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; {</div>
1161
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <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>
1162
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; }</div>
1163
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; </div>
1164
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="comment">// Repeat for the right child.</span></div>
1165
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordtype">int</span> right = dendrogram[(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a190c729a3f3f622f82cee4917946b50f">numObjects</a> - 1) + <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> - 1];</div>
1166
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">if</span> (right &lt; 0)</div>
1167
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div>
1168
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; nodeMap[regionNodeMap[std::abs(right) - 1]] = allocCounter;</div>
1169
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; ++allocCounter;</div>
1170
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div>
1171
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">else</span></div>
1172
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div>
1173
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <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>
1174
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div>
1175
+ <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;}</div>
1176
1176
  </div><!-- fragment -->
1177
1177
  </div>
1178
1178
  </div>
@@ -1197,7 +1197,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1197
1197
  </table>
1198
1198
  </div><div class="memdoc">
1199
1199
 
1200
- <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00135">135</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1200
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00141">141</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1201
1201
 
1202
1202
  </div>
1203
1203
  </div>
@@ -1221,7 +1221,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1221
1221
  </table>
1222
1222
  </div><div class="memdoc">
1223
1223
 
1224
- <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>
1224
+ <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>
1225
1225
 
1226
1226
  </div>
1227
1227
  </div>
@@ -1245,7 +1245,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1245
1245
  </table>
1246
1246
  </div><div class="memdoc">
1247
1247
 
1248
- <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>
1248
+ <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>
1249
1249
 
1250
1250
  </div>
1251
1251
  </div>
@@ -1269,7 +1269,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1269
1269
  </table>
1270
1270
  </div><div class="memdoc">
1271
1271
 
1272
- <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>
1272
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00131">131</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1273
1273
 
1274
1274
  </div>
1275
1275
  </div>
@@ -1293,7 +1293,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1293
1293
  </table>
1294
1294
  </div><div class="memdoc">
1295
1295
 
1296
- <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>
1296
+ <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>
1297
1297
 
1298
1298
  </div>
1299
1299
  </div>
@@ -1317,7 +1317,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1317
1317
  </table>
1318
1318
  </div><div class="memdoc">
1319
1319
 
1320
- <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00134">134</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1320
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00140">140</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1321
1321
 
1322
1322
  </div>
1323
1323
  </div>
@@ -1341,7 +1341,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1341
1341
  </table>
1342
1342
  </div><div class="memdoc">
1343
1343
 
1344
- <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>
1344
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00136">136</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1345
1345
 
1346
1346
  </div>
1347
1347
  </div>
@@ -1365,7 +1365,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1365
1365
  </table>
1366
1366
  </div><div class="memdoc">
1367
1367
 
1368
- <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00131">131</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1368
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00137">137</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1369
1369
 
1370
1370
  </div>
1371
1371
  </div>
@@ -1389,7 +1389,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1389
1389
  </table>
1390
1390
  </div><div class="memdoc">
1391
1391
 
1392
- <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00133">133</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1392
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00139">139</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1393
1393
 
1394
1394
  </div>
1395
1395
  </div>
@@ -1413,7 +1413,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1413
1413
  </table>
1414
1414
  </div><div class="memdoc">
1415
1415
 
1416
- <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00136">136</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1416
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00142">142</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1417
1417
 
1418
1418
  </div>
1419
1419
  </div>
@@ -1438,7 +1438,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1438
1438
  </div><div class="memdoc">
1439
1439
  <p>Statistics strings. </p>
1440
1440
 
1441
- <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>
1441
+ <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>
1442
1442
 
1443
1443
  </div>
1444
1444
  </div>
@@ -1462,7 +1462,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1462
1462
  </table>
1463
1463
  </div><div class="memdoc">
1464
1464
 
1465
- <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00132">132</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1465
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00138">138</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1466
1466
 
1467
1467
  </div>
1468
1468
  </div>
@@ -1486,7 +1486,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1486
1486
  </table>
1487
1487
  </div><div class="memdoc">
1488
1488
 
1489
- <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>
1489
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00134">134</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1490
1490
 
1491
1491
  </div>
1492
1492
  </div>
@@ -1510,7 +1510,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1510
1510
  </table>
1511
1511
  </div><div class="memdoc">
1512
1512
 
1513
- <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>
1513
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00135">135</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1514
1514
 
1515
1515
  </div>
1516
1516
  </div>
@@ -1534,7 +1534,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1534
1534
  </table>
1535
1535
  </div><div class="memdoc">
1536
1536
 
1537
- <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>
1537
+ <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>
1538
1538
 
1539
1539
  </div>
1540
1540
  </div>
@@ -1558,7 +1558,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1558
1558
  </table>
1559
1559
  </div><div class="memdoc">
1560
1560
 
1561
- <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>
1561
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00133">133</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1562
1562
 
1563
1563
  </div>
1564
1564
  </div>
@@ -1582,7 +1582,7 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1582
1582
  </table>
1583
1583
  </div><div class="memdoc">
1584
1584
 
1585
- <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>
1585
+ <p class="definition">Definition at line <a class="el" href="NodeIDAllocator_8h_source.html#l00132">132</a> of file <a class="el" href="NodeIDAllocator_8h_source.html">NodeIDAllocator.h</a>.</p>
1586
1586
 
1587
1587
  </div>
1588
1588
  </div>
@@ -1591,58 +1591,58 @@ points-to set" is encoded by graph which is an adjacency list ensuring that x in
1591
1591
  <li>/home/runner/work/SVF/SVF/svf/lib/Util/<a class="el" href="NodeIDAllocator_8cpp_source.html">NodeIDAllocator.cpp</a></li>
1592
1592
  </ul>
1593
1593
  </div><!-- contents -->
1594
- <div class="ttc" id="aclassSVF_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&lt; NodeID &gt; &amp;nodeMap, const int *dendrogram, const size_t numObjects, unsigned &amp;allocCounter, Set&lt; int &gt; &amp;visited, const int index, const std::vector&lt; NodeID &gt; &amp;regionNodeMap)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00503">NodeIDAllocator.cpp:503</a></div></div>
1595
- <div class="ttc" id="aclassSVF_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>
1594
+ <div class="ttc" id="aclassSVF_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&lt; NodeID &gt; &amp;nodeMap, const int *dendrogram, const size_t numObjects, unsigned &amp;allocCounter, Set&lt; int &gt; &amp;visited, const int index, const std::vector&lt; NodeID &gt; &amp;regionNodeMap)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00501">NodeIDAllocator.cpp:501</a></div></div>
1595
+ <div class="ttc" id="aclassSVF_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#l00411">NodeIDAllocator.cpp:411</a></div></div>
1596
1596
  <div class="ttc" id="aclassSVF_1_1Options_html_a595a98babd7d51af6dacd935bd27d1f0"><div class="ttname"><a href="classSVF_1_1Options.html#a595a98babd7d51af6dacd935bd27d1f0">SVF::Options::PtType</a></div><div class="ttdeci">static const OptionMap&lt; PointsTo::Type &gt; 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#l00050">Options.h:50</a></div></div>
1597
1597
  <div class="ttc" id="aSVFType_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00571">SVFType.h:571</a></div></div>
1598
- <div class="ttc" id="aclassSVF_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#l00120">NodeIDAllocator.h:120</a></div></div>
1599
- <div class="ttc" id="aclassSVF_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&lt; NodeID &gt; &amp;nodeMap, const Map&lt; PointsTo, unsigned &gt; pointsToSets, Map&lt; std::string, std::string &gt; &amp;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>
1600
- <div class="ttc" id="aclassSVF_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#l00128">NodeIDAllocator.h:128</a></div></div>
1601
- <div class="ttc" id="aclassSVF_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#l00131">NodeIDAllocator.h:131</a></div></div>
1598
+ <div class="ttc" id="aclassSVF_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#l00126">NodeIDAllocator.h:126</a></div></div>
1599
+ <div class="ttc" id="aclassSVF_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&lt; NodeID &gt; &amp;nodeMap, const Map&lt; PointsTo, unsigned &gt; pointsToSets, Map&lt; std::string, std::string &gt; &amp;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#l00572">NodeIDAllocator.cpp:572</a></div></div>
1600
+ <div class="ttc" id="aclassSVF_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#l00134">NodeIDAllocator.h:134</a></div></div>
1601
+ <div class="ttc" id="aclassSVF_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#l00137">NodeIDAllocator.h:137</a></div></div>
1602
1602
  <div class="ttc" id="anamespaceSVF_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="SVFType_8h_source.html#l00053">SVFType.h:53</a></div></div>
1603
1603
  <div class="ttc" id="anamespaceSVF_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#l00260">SVFUtil.cpp:260</a></div></div>
1604
- <div class="ttc" id="aclassSVF_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#l00124">NodeIDAllocator.h:124</a></div></div>
1605
- <div class="ttc" id="aclassSVF_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&lt; std::string, std::string &gt; &amp;stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00692">NodeIDAllocator.cpp:692</a></div></div>
1604
+ <div class="ttc" id="aclassSVF_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#l00130">NodeIDAllocator.h:130</a></div></div>
1605
+ <div class="ttc" id="aclassSVF_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&lt; std::string, std::string &gt; &amp;stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00690">NodeIDAllocator.cpp:690</a></div></div>
1606
1606
  <div class="ttc" id="acJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
1607
1607
  <div class="ttc" id="acJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
1608
1608
  <div class="ttc" id="afastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a></div><div class="ttdeci">@ HCLUST_METHOD_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00070">fastcluster.h:70</a></div></div>
1609
- <div class="ttc" id="aclassSVF_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#l00121">NodeIDAllocator.h:121</a></div></div>
1609
+ <div class="ttc" id="aclassSVF_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#l00127">NodeIDAllocator.h:127</a></div></div>
1610
1610
  <div class="ttc" id="afastcluster_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#l00156">fastcluster.cpp:156</a></div></div>
1611
- <div class="ttc" id="aclassSVF_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&lt; hclust_fast_methods, std::vector&lt; NodeID &gt; &gt; determineBestMapping(const std::vector&lt; std::pair&lt; hclust_fast_methods, std::vector&lt; NodeID &gt;&gt;&gt; &amp;candidates, Map&lt; PointsTo, unsigned &gt; pointsToSets, const std::string &amp;evalSubtitle, double &amp;evalTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00652">NodeIDAllocator.cpp:652</a></div></div>
1611
+ <div class="ttc" id="aclassSVF_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&lt; hclust_fast_methods, std::vector&lt; NodeID &gt; &gt; determineBestMapping(const std::vector&lt; std::pair&lt; hclust_fast_methods, std::vector&lt; NodeID &gt;&gt;&gt; &amp;candidates, Map&lt; PointsTo, unsigned &gt; pointsToSets, const std::string &amp;evalSubtitle, double &amp;evalTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00650">NodeIDAllocator.cpp:650</a></div></div>
1612
1612
  <div class="ttc" id="aclassSVF_1_1SVFStat_html_ac9d390c417df6f6af6b274618b87010d"><div class="ttname"><a href="classSVF_1_1SVFStat.html#ac9d390c417df6f6af6b274618b87010d">SVF::SVFStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStat_8cpp_source.html#l00047">SVFStat.cpp:47</a></div></div>
1613
- <div class="ttc" id="aclassSVF_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#l00127">NodeIDAllocator.h:127</a></div></div>
1613
+ <div class="ttc" id="aclassSVF_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#l00133">NodeIDAllocator.h:133</a></div></div>
1614
1614
  <div class="ttc" id="acJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
1615
- <div class="ttc" id="aclassSVF_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#l00135">NodeIDAllocator.h:135</a></div></div>
1616
- <div class="ttc" id="aclassSVF_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#l00093">NodeIDAllocator.h:93</a></div></div>
1615
+ <div class="ttc" id="aclassSVF_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#l00141">NodeIDAllocator.h:141</a></div></div>
1616
+ <div class="ttc" id="aclassSVF_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#l00099">NodeIDAllocator.h:99</a></div></div>
1617
1617
  <div class="ttc" id="aclassSVF_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#l00026">NodeIDAllocator.cpp:26</a></div></div>
1618
- <div class="ttc" id="aclassSVF_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#l00129">NodeIDAllocator.h:129</a></div></div>
1619
- <div class="ttc" id="aclassSVF_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#l00123">NodeIDAllocator.h:123</a></div></div>
1618
+ <div class="ttc" id="aclassSVF_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#l00135">NodeIDAllocator.h:135</a></div></div>
1619
+ <div class="ttc" id="aclassSVF_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#l00129">NodeIDAllocator.h:129</a></div></div>
1620
1620
  <div class="ttc" id="afastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a></div><div class="ttdeci">@ HCLUST_METHOD_SVF_BEST</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00076">fastcluster.h:76</a></div></div>
1621
1621
  <div class="ttc" id="aclassSVF_1_1Options_html_a5a70a23e30df8dea3fcaf0e80479fe88"><div class="ttname"><a href="classSVF_1_1Options.html#a5a70a23e30df8dea3fcaf0e80479fe88">SVF::Options::RegionAlign</a></div><div class="ttdeci">static const Option&lt; bool &gt; 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#l00062">Options.h:62</a></div></div>
1622
1622
  <div class="ttc" id="aSVFType_8h_html_ab8ca0fd9d0caa6817d305cae0f1cf022"><div class="ttname"><a href="SVFType_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'll use for bit vectors, in bits.</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00575">SVFType.h:575</a></div></div>
1623
- <div class="ttc" id="aclassSVF_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&lt; unsigned &gt; regionObjects(const Map&lt; NodeID, Set&lt; NodeID &gt;&gt; &amp;graph, size_t numObjects, size_t &amp;numLabels)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00534">NodeIDAllocator.cpp:534</a></div></div>
1624
- <div class="ttc" id="aclassSVF_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&lt; std::pair&lt; const PointsTo *, unsigned &gt;&gt; pointsToSets, const size_t numObjects, const Map&lt; NodeID, unsigned &gt; &amp;nodeMap, double &amp;distanceMatrixTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00432">NodeIDAllocator.cpp:432</a></div></div>
1623
+ <div class="ttc" id="aclassSVF_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&lt; unsigned &gt; regionObjects(const Map&lt; NodeID, Set&lt; NodeID &gt;&gt; &amp;graph, size_t numObjects, size_t &amp;numLabels)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00532">NodeIDAllocator.cpp:532</a></div></div>
1624
+ <div class="ttc" id="aclassSVF_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&lt; std::pair&lt; const PointsTo *, unsigned &gt;&gt; pointsToSets, const size_t numObjects, const Map&lt; NodeID, unsigned &gt; &amp;nodeMap, double &amp;distanceMatrixTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00430">NodeIDAllocator.cpp:430</a></div></div>
1625
1625
  <div class="ttc" id="aclassSVF_1_1Options_html_a38107576f4f242191cdbfb1ca51f93cd"><div class="ttname"><a href="classSVF_1_1Options.html#a38107576f4f242191cdbfb1ca51f93cd">SVF::Options::NodeAllocStrat</a></div><div class="ttdeci">static const OptionMap&lt; SVF::NodeIDAllocator::Strategy &gt; NodeAllocStrat</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00035">Options.h:35</a></div></div>
1626
- <div class="ttc" id="aclassSVF_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#l00126">NodeIDAllocator.h:126</a></div></div>
1626
+ <div class="ttc" id="aclassSVF_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#l00132">NodeIDAllocator.h:132</a></div></div>
1627
1627
  <div class="ttc" id="aclassSVF_1_1Options_html_a8cc5b2a363724b558f4932277a87c0f6"><div class="ttname"><a href="classSVF_1_1Options.html#a8cc5b2a363724b558f4932277a87c0f6">SVF::Options::RegionedClustering</a></div><div class="ttdeci">static const Option&lt; bool &gt; RegionedClustering</div><div class="ttdoc">Cluster partitions separately.</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00059">Options.h:59</a></div></div>
1628
1628
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
1629
- <div class="ttc" id="aclassSVF_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#l00122">NodeIDAllocator.h:122</a></div></div>
1629
+ <div class="ttc" id="aclassSVF_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#l00128">NodeIDAllocator.h:128</a></div></div>
1630
1630
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923ea0397c2678894d1792fcd3432a7aa64fb">SVF::PointsTo::CBV</a></div><div class="ttdeci">@ CBV</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00034">PointsTo.h:34</a></div></div>
1631
1631
  <div class="ttc" id="afastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a></div><div class="ttdeci">@ HCLUST_METHOD_SINGLE</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00068">fastcluster.h:68</a></div></div>
1632
- <div class="ttc" id="aclassSVF_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#l00134">NodeIDAllocator.h:134</a></div></div>
1632
+ <div class="ttc" id="aclassSVF_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#l00140">NodeIDAllocator.h:140</a></div></div>
1633
1633
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f757f92ebf0a2ebdb5e6b001606923eacccb6e19f3e8db5f5b5b8858b22da61a">SVF::PointsTo::SBV</a></div><div class="ttdeci">@ SBV</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00033">PointsTo.h:33</a></div></div>
1634
1634
  <div class="ttc" id="afastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a></div><div class="ttdeci">@ HCLUST_METHOD_AVERAGE</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00072">fastcluster.h:72</a></div></div>
1635
1635
  <div class="ttc" id="anamespaceSVF_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="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
1636
- <div class="ttc" id="aclassSVF_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#l00130">NodeIDAllocator.h:130</a></div></div>
1636
+ <div class="ttc" id="aclassSVF_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#l00136">NodeIDAllocator.h:136</a></div></div>
1637
1637
  <div class="ttc" id="anamespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00102">SVFType.h:102</a></div></div>
1638
- <div class="ttc" id="aclassSVF_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#l00133">NodeIDAllocator.h:133</a></div></div>
1639
- <div class="ttc" id="aclassSVF_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#l00132">NodeIDAllocator.h:132</a></div></div>
1638
+ <div class="ttc" id="aclassSVF_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#l00139">NodeIDAllocator.h:139</a></div></div>
1639
+ <div class="ttc" id="aclassSVF_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#l00138">NodeIDAllocator.h:138</a></div></div>
1640
1640
  <div class="ttc" id="aclassSVF_1_1Options_html_ac17ce6d75293dcd0baf366cbeb0cb6d6"><div class="ttname"><a href="classSVF_1_1Options.html#ac17ce6d75293dcd0baf366cbeb0cb6d6">SVF::Options::ClusterMethod</a></div><div class="ttdeci">static const OptionMap&lt; enum hclust_fast_methods &gt; ClusterMethod</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00056">Options.h:56</a></div></div>
1641
1641
  <div class="ttc" id="acJSON_8h_html_a1a175e87536301df98c805ac0636ad7c"><div class="ttname"><a href="cJSON_8h.html#a1a175e87536301df98c805ac0636ad7c">b</a></div><div class="ttdeci">const cJSON *const b</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00255">cJSON.h:255</a></div></div>
1642
1642
  <div class="ttc" id="afastcluster_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>
1643
- <div class="ttc" id="aclassSVF_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 &amp;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>
1644
- <div class="ttc" id="aclassSVF_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#l00125">NodeIDAllocator.h:125</a></div></div>
1645
- <div class="ttc" id="aclassSVF_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#l00136">NodeIDAllocator.h:136</a></div></div>
1643
+ <div class="ttc" id="aclassSVF_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 &amp;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#l00417">NodeIDAllocator.cpp:417</a></div></div>
1644
+ <div class="ttc" id="aclassSVF_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#l00131">NodeIDAllocator.h:131</a></div></div>
1645
+ <div class="ttc" id="aclassSVF_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#l00142">NodeIDAllocator.h:142</a></div></div>
1646
1646
  <!-- start footer part -->
1647
1647
  <hr class="footer"/><address class="footer"><small>
1648
1648
  Generated by &#160;<a href="http://www.doxygen.org/index.html">