svf-lib 1.0.2643 → 1.0.2655
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish-svf-lib.yml +44 -12
- package/SVF-linux-aarch64/bin/ae +0 -0
- package/SVF-linux-aarch64/bin/cfl +0 -0
- package/SVF-linux-aarch64/bin/mta +0 -0
- package/SVF-linux-aarch64/bin/svf-ex +0 -0
- package/SVF-linux-aarch64/bin/wpa +0 -0
- package/SVF-linux-aarch64/include/AE/Core/AbstractState.h +1 -1
- package/SVF-linux-aarch64/include/AE/Core/ICFGWTO.h +4 -1
- package/SVF-linux-aarch64/include/AE/Core/NumericValue.h +2 -1
- package/SVF-linux-aarch64/include/AE/Core/RelExeState.h +1 -0
- package/SVF-linux-aarch64/include/AE/Core/RelationSolver.h +5 -1
- package/SVF-linux-aarch64/include/AE/Svfexe/AbsExtAPI.h +9 -3
- package/SVF-linux-aarch64/include/AE/Svfexe/SparseAbstractInterpretation.h +3 -1
- package/SVF-linux-aarch64/include/CFL/CFGNormalizer.h +2 -1
- package/SVF-linux-aarch64/include/CFL/CFGrammar.h +8 -4
- package/SVF-linux-aarch64/include/CFL/CFLAlias.h +3 -2
- package/SVF-linux-aarch64/include/CFL/CFLBase.h +4 -9
- package/SVF-linux-aarch64/include/CFL/CFLGramGraphChecker.h +3 -1
- package/SVF-linux-aarch64/include/CFL/CFLGraphBuilder.h +1 -0
- package/SVF-linux-aarch64/include/CFL/CFLSVFGBuilder.h +5 -0
- package/SVF-linux-aarch64/include/CFL/CFLSolver.h +2 -1
- package/SVF-linux-aarch64/include/CFL/CFLStat.h +2 -2
- package/SVF-linux-aarch64/include/CFL/CFLVF.h +5 -2
- package/SVF-linux-aarch64/include/CFL/GrammarBuilder.h +3 -1
- package/SVF-linux-aarch64/include/DDA/ContextDDA.h +1 -0
- package/SVF-linux-aarch64/include/DDA/DDAClient.h +2 -2
- package/SVF-linux-aarch64/include/DDA/DDAPass.h +5 -1
- package/SVF-linux-aarch64/include/DDA/DDAStat.h +2 -1
- package/SVF-linux-aarch64/include/DDA/DDAVFSolver.h +3 -1
- package/SVF-linux-aarch64/include/DDA/FlowDDA.h +2 -1
- package/SVF-linux-aarch64/include/Graphs/CDG.h +6 -0
- package/SVF-linux-aarch64/include/Graphs/ICFGNode.h +1 -0
- package/SVF-linux-aarch64/include/Graphs/IRGraph.h +2 -3
- package/SVF-linux-aarch64/include/Graphs/SCC.h +4 -3
- package/SVF-linux-aarch64/include/Graphs/WTO.h +2 -3
- package/SVF-linux-aarch64/include/MSSA/MSSAMuChi.h +2 -1
- package/SVF-linux-aarch64/include/MSSA/MemPartition.h +1 -0
- package/SVF-linux-aarch64/include/MSSA/MemRegion.h +6 -2
- package/SVF-linux-aarch64/include/MSSA/SVFGBuilder.h +1 -1
- package/SVF-linux-aarch64/include/MTA/MHP.h +1 -0
- package/SVF-linux-aarch64/include/MTA/MTA.h +1 -5
- package/SVF-linux-aarch64/include/MTA/TCT.h +3 -2
- package/SVF-linux-aarch64/include/MemoryModel/AbstractPointsToDS.h +0 -2
- package/SVF-linux-aarch64/include/MemoryModel/AccessPath.h +6 -2
- package/SVF-linux-aarch64/include/MemoryModel/MutablePointsToDS.h +0 -1
- package/SVF-linux-aarch64/include/MemoryModel/PersistentPointsToCache.h +1 -1
- package/SVF-linux-aarch64/include/MemoryModel/PersistentPointsToDS.h +0 -1
- package/SVF-linux-aarch64/include/MemoryModel/PointerAnalysis.h +2 -7
- package/SVF-linux-aarch64/include/MemoryModel/PointerAnalysisImpl.h +5 -1
- package/SVF-linux-aarch64/include/MemoryModel/PointsTo.h +2 -1
- package/SVF-linux-aarch64/include/MemoryModel/SVFLoop.h +4 -1
- package/SVF-linux-aarch64/include/SABER/ProgSlice.h +0 -1
- package/SVF-linux-aarch64/include/SABER/SaberCheckerAPI.h +1 -2
- package/SVF-linux-aarch64/include/SABER/SaberSVFGBuilder.h +5 -1
- package/SVF-linux-aarch64/include/SABER/SrcSnkDDA.h +1 -1
- package/SVF-linux-aarch64/include/SVF-LLVM/LLVMLoopAnalysis.h +0 -1
- package/SVF-linux-aarch64/include/SVF-LLVM/LLVMUtil.h +2 -0
- package/SVF-linux-aarch64/include/SVFIR/ObjTypeInfo.h +3 -2
- package/SVF-linux-aarch64/include/SVFIR/PAGBuilderFromFile.h +1 -0
- package/SVF-linux-aarch64/include/SVFIR/SVFIR.h +3 -1
- package/SVF-linux-aarch64/include/SVFIR/SVFStatements.h +1 -0
- package/SVF-linux-aarch64/include/SVFIR/SVFType.h +0 -59
- package/SVF-linux-aarch64/include/SVFIR/SVFValue.h +2 -3
- package/SVF-linux-aarch64/include/SVFIR/SVFVariables.h +7 -1
- package/SVF-linux-aarch64/include/Util/CDGBuilder.h +8 -2
- package/SVF-linux-aarch64/include/Util/CallGraphBuilder.h +0 -2
- package/SVF-linux-aarch64/include/Util/CoreBitVector.h +1 -1
- package/SVF-linux-aarch64/include/Util/CxtStmt.h +0 -2
- package/SVF-linux-aarch64/include/Util/DPItem.h +2 -1
- package/SVF-linux-aarch64/include/Util/ExtAPI.h +3 -4
- package/SVF-linux-aarch64/include/Util/GeneralType.h +52 -48
- package/SVF-linux-aarch64/include/Util/Hash.h +56 -0
- package/SVF-linux-aarch64/include/Util/NodeIDAllocator.h +1 -1
- package/SVF-linux-aarch64/include/Util/Options.h +0 -1
- package/SVF-linux-aarch64/include/Util/PTAStat.h +3 -4
- package/SVF-linux-aarch64/include/Util/SVFBugReport.h +7 -9
- package/SVF-linux-aarch64/include/Util/SVFLoopAndDomInfo.h +7 -4
- package/SVF-linux-aarch64/include/Util/SVFStat.h +1 -0
- package/SVF-linux-aarch64/include/Util/SVFUtil.h +5 -5
- package/SVF-linux-aarch64/include/Util/SparseBitVector.h +13 -0
- package/SVF-linux-aarch64/include/Util/ThreadAPI.h +1 -1
- package/SVF-linux-aarch64/include/Util/WorkList.h +2 -2
- package/SVF-linux-aarch64/include/Util/Z3Expr.h +1 -1
- package/SVF-linux-aarch64/include/WPA/Andersen.h +3 -3
- package/SVF-linux-aarch64/include/WPA/AndersenPWC.h +2 -1
- package/SVF-linux-aarch64/include/WPA/CSC.h +5 -5
- package/SVF-linux-aarch64/include/WPA/FlowSensitive.h +1 -2
- package/SVF-linux-aarch64/include/WPA/Steensgaard.h +5 -0
- package/SVF-linux-aarch64/include/WPA/TypeAnalysis.h +5 -0
- package/SVF-linux-aarch64/include/WPA/VersionedFlowSensitive.h +1 -4
- package/SVF-linux-aarch64/include/WPA/WPAFSSolver.h +1 -0
- package/SVF-linux-aarch64/include/WPA/WPAPass.h +5 -1
- package/SVF-linux-aarch64/include/WPA/WPASolver.h +1 -0
- package/SVF-linux-aarch64/include/WPA/WPAStat.h +1 -0
- package/SVF-linux-aarch64/lib/cmake/SVF/SVFTargets.cmake +1 -1
- package/SVF-linux-aarch64/lib/libSvfCore.so.3.4 +0 -0
- package/SVF-linux-aarch64/lib/libSvfLLVM.so.3.4 +0 -0
- package/SVF-linux-x86_64/bin/ae +0 -0
- package/SVF-linux-x86_64/bin/mta +0 -0
- package/SVF-linux-x86_64/bin/saber +0 -0
- package/SVF-linux-x86_64/bin/svf-ex +0 -0
- package/SVF-linux-x86_64/bin/wpa +0 -0
- package/SVF-linux-x86_64/include/AE/Core/AbstractState.h +1 -1
- package/SVF-linux-x86_64/include/AE/Core/ICFGWTO.h +4 -1
- package/SVF-linux-x86_64/include/AE/Core/NumericValue.h +2 -1
- package/SVF-linux-x86_64/include/AE/Core/RelExeState.h +1 -0
- package/SVF-linux-x86_64/include/AE/Core/RelationSolver.h +5 -1
- package/SVF-linux-x86_64/include/AE/Svfexe/AbsExtAPI.h +9 -3
- package/SVF-linux-x86_64/include/AE/Svfexe/SparseAbstractInterpretation.h +3 -1
- package/SVF-linux-x86_64/include/CFL/CFGNormalizer.h +2 -1
- package/SVF-linux-x86_64/include/CFL/CFGrammar.h +8 -4
- package/SVF-linux-x86_64/include/CFL/CFLAlias.h +3 -2
- package/SVF-linux-x86_64/include/CFL/CFLBase.h +4 -9
- package/SVF-linux-x86_64/include/CFL/CFLGramGraphChecker.h +3 -1
- package/SVF-linux-x86_64/include/CFL/CFLGraphBuilder.h +1 -0
- package/SVF-linux-x86_64/include/CFL/CFLSVFGBuilder.h +5 -0
- package/SVF-linux-x86_64/include/CFL/CFLSolver.h +2 -1
- package/SVF-linux-x86_64/include/CFL/CFLStat.h +2 -2
- package/SVF-linux-x86_64/include/CFL/CFLVF.h +5 -2
- package/SVF-linux-x86_64/include/CFL/GrammarBuilder.h +3 -1
- package/SVF-linux-x86_64/include/DDA/ContextDDA.h +1 -0
- package/SVF-linux-x86_64/include/DDA/DDAClient.h +2 -2
- package/SVF-linux-x86_64/include/DDA/DDAPass.h +5 -1
- package/SVF-linux-x86_64/include/DDA/DDAStat.h +2 -1
- package/SVF-linux-x86_64/include/DDA/DDAVFSolver.h +3 -1
- package/SVF-linux-x86_64/include/DDA/FlowDDA.h +2 -1
- package/SVF-linux-x86_64/include/Graphs/CDG.h +6 -0
- package/SVF-linux-x86_64/include/Graphs/ICFGNode.h +1 -0
- package/SVF-linux-x86_64/include/Graphs/IRGraph.h +2 -3
- package/SVF-linux-x86_64/include/Graphs/SCC.h +4 -3
- package/SVF-linux-x86_64/include/Graphs/WTO.h +2 -3
- package/SVF-linux-x86_64/include/MSSA/MSSAMuChi.h +2 -1
- package/SVF-linux-x86_64/include/MSSA/MemPartition.h +1 -0
- package/SVF-linux-x86_64/include/MSSA/MemRegion.h +6 -2
- package/SVF-linux-x86_64/include/MSSA/SVFGBuilder.h +1 -1
- package/SVF-linux-x86_64/include/MTA/MHP.h +1 -0
- package/SVF-linux-x86_64/include/MTA/MTA.h +1 -5
- package/SVF-linux-x86_64/include/MTA/TCT.h +3 -2
- package/SVF-linux-x86_64/include/MemoryModel/AbstractPointsToDS.h +0 -2
- package/SVF-linux-x86_64/include/MemoryModel/AccessPath.h +6 -2
- package/SVF-linux-x86_64/include/MemoryModel/MutablePointsToDS.h +0 -1
- package/SVF-linux-x86_64/include/MemoryModel/PersistentPointsToCache.h +1 -1
- package/SVF-linux-x86_64/include/MemoryModel/PersistentPointsToDS.h +0 -1
- package/SVF-linux-x86_64/include/MemoryModel/PointerAnalysis.h +2 -7
- package/SVF-linux-x86_64/include/MemoryModel/PointerAnalysisImpl.h +5 -1
- package/SVF-linux-x86_64/include/MemoryModel/PointsTo.h +2 -1
- package/SVF-linux-x86_64/include/MemoryModel/SVFLoop.h +4 -1
- package/SVF-linux-x86_64/include/SABER/ProgSlice.h +0 -1
- package/SVF-linux-x86_64/include/SABER/SaberCheckerAPI.h +1 -2
- package/SVF-linux-x86_64/include/SABER/SaberSVFGBuilder.h +5 -1
- package/SVF-linux-x86_64/include/SABER/SrcSnkDDA.h +1 -1
- package/SVF-linux-x86_64/include/SVF-LLVM/LLVMLoopAnalysis.h +0 -1
- package/SVF-linux-x86_64/include/SVF-LLVM/LLVMUtil.h +2 -0
- package/SVF-linux-x86_64/include/SVFIR/ObjTypeInfo.h +3 -2
- package/SVF-linux-x86_64/include/SVFIR/PAGBuilderFromFile.h +1 -0
- package/SVF-linux-x86_64/include/SVFIR/SVFIR.h +3 -1
- package/SVF-linux-x86_64/include/SVFIR/SVFStatements.h +1 -0
- package/SVF-linux-x86_64/include/SVFIR/SVFType.h +0 -59
- package/SVF-linux-x86_64/include/SVFIR/SVFValue.h +2 -3
- package/SVF-linux-x86_64/include/SVFIR/SVFVariables.h +7 -1
- package/SVF-linux-x86_64/include/Util/CDGBuilder.h +8 -2
- package/SVF-linux-x86_64/include/Util/CallGraphBuilder.h +0 -2
- package/SVF-linux-x86_64/include/Util/CoreBitVector.h +1 -1
- package/SVF-linux-x86_64/include/Util/CxtStmt.h +0 -2
- package/SVF-linux-x86_64/include/Util/DPItem.h +2 -1
- package/SVF-linux-x86_64/include/Util/ExtAPI.h +3 -4
- package/SVF-linux-x86_64/include/Util/GeneralType.h +52 -48
- package/SVF-linux-x86_64/include/Util/Hash.h +56 -0
- package/SVF-linux-x86_64/include/Util/NodeIDAllocator.h +1 -1
- package/SVF-linux-x86_64/include/Util/Options.h +0 -1
- package/SVF-linux-x86_64/include/Util/PTAStat.h +3 -4
- package/SVF-linux-x86_64/include/Util/SVFBugReport.h +7 -9
- package/SVF-linux-x86_64/include/Util/SVFLoopAndDomInfo.h +7 -4
- package/SVF-linux-x86_64/include/Util/SVFStat.h +1 -0
- package/SVF-linux-x86_64/include/Util/SVFUtil.h +5 -5
- package/SVF-linux-x86_64/include/Util/SparseBitVector.h +13 -0
- package/SVF-linux-x86_64/include/Util/ThreadAPI.h +1 -1
- package/SVF-linux-x86_64/include/Util/WorkList.h +2 -2
- package/SVF-linux-x86_64/include/Util/Z3Expr.h +1 -1
- package/SVF-linux-x86_64/include/WPA/Andersen.h +3 -3
- package/SVF-linux-x86_64/include/WPA/AndersenPWC.h +2 -1
- package/SVF-linux-x86_64/include/WPA/CSC.h +5 -5
- package/SVF-linux-x86_64/include/WPA/FlowSensitive.h +1 -2
- package/SVF-linux-x86_64/include/WPA/Steensgaard.h +5 -0
- package/SVF-linux-x86_64/include/WPA/TypeAnalysis.h +5 -0
- package/SVF-linux-x86_64/include/WPA/VersionedFlowSensitive.h +1 -4
- package/SVF-linux-x86_64/include/WPA/WPAFSSolver.h +1 -0
- package/SVF-linux-x86_64/include/WPA/WPAPass.h +5 -1
- package/SVF-linux-x86_64/include/WPA/WPASolver.h +1 -0
- package/SVF-linux-x86_64/include/WPA/WPAStat.h +1 -0
- package/SVF-linux-x86_64/lib/cmake/SVF/SVFTargets.cmake +1 -1
- package/SVF-linux-x86_64/lib/libSvfCore.so.3.4 +0 -0
- package/SVF-linux-x86_64/lib/libSvfLLVM.so.3.4 +0 -0
- package/SVF-osx/bin/ae +0 -0
- package/SVF-osx/bin/cfl +0 -0
- package/SVF-osx/bin/dvf +0 -0
- package/SVF-osx/bin/llvm2svf +0 -0
- package/SVF-osx/bin/mta +0 -0
- package/SVF-osx/bin/saber +0 -0
- package/SVF-osx/bin/svf-ex +0 -0
- package/SVF-osx/bin/wpa +0 -0
- package/SVF-osx/include/AE/Core/AbstractState.h +1 -1
- package/SVF-osx/include/AE/Core/ICFGWTO.h +4 -1
- package/SVF-osx/include/AE/Core/NumericValue.h +2 -1
- package/SVF-osx/include/AE/Core/RelExeState.h +1 -0
- package/SVF-osx/include/AE/Core/RelationSolver.h +5 -1
- package/SVF-osx/include/AE/Svfexe/AbsExtAPI.h +9 -3
- package/SVF-osx/include/AE/Svfexe/SparseAbstractInterpretation.h +3 -1
- package/SVF-osx/include/CFL/CFGNormalizer.h +2 -1
- package/SVF-osx/include/CFL/CFGrammar.h +8 -4
- package/SVF-osx/include/CFL/CFLAlias.h +3 -2
- package/SVF-osx/include/CFL/CFLBase.h +4 -9
- package/SVF-osx/include/CFL/CFLGramGraphChecker.h +3 -1
- package/SVF-osx/include/CFL/CFLGraphBuilder.h +1 -0
- package/SVF-osx/include/CFL/CFLSVFGBuilder.h +5 -0
- package/SVF-osx/include/CFL/CFLSolver.h +2 -1
- package/SVF-osx/include/CFL/CFLStat.h +2 -2
- package/SVF-osx/include/CFL/CFLVF.h +5 -2
- package/SVF-osx/include/CFL/GrammarBuilder.h +3 -1
- package/SVF-osx/include/DDA/ContextDDA.h +1 -0
- package/SVF-osx/include/DDA/DDAClient.h +2 -2
- package/SVF-osx/include/DDA/DDAPass.h +5 -1
- package/SVF-osx/include/DDA/DDAStat.h +2 -1
- package/SVF-osx/include/DDA/DDAVFSolver.h +3 -1
- package/SVF-osx/include/DDA/FlowDDA.h +2 -1
- package/SVF-osx/include/Graphs/CDG.h +6 -0
- package/SVF-osx/include/Graphs/ICFGNode.h +1 -0
- package/SVF-osx/include/Graphs/IRGraph.h +2 -3
- package/SVF-osx/include/Graphs/SCC.h +4 -3
- package/SVF-osx/include/Graphs/WTO.h +2 -3
- package/SVF-osx/include/MSSA/MSSAMuChi.h +2 -1
- package/SVF-osx/include/MSSA/MemPartition.h +1 -0
- package/SVF-osx/include/MSSA/MemRegion.h +6 -2
- package/SVF-osx/include/MSSA/SVFGBuilder.h +1 -1
- package/SVF-osx/include/MTA/MHP.h +1 -0
- package/SVF-osx/include/MTA/MTA.h +1 -5
- package/SVF-osx/include/MTA/TCT.h +3 -2
- package/SVF-osx/include/MemoryModel/AbstractPointsToDS.h +0 -2
- package/SVF-osx/include/MemoryModel/AccessPath.h +6 -2
- package/SVF-osx/include/MemoryModel/MutablePointsToDS.h +0 -1
- package/SVF-osx/include/MemoryModel/PersistentPointsToCache.h +1 -1
- package/SVF-osx/include/MemoryModel/PersistentPointsToDS.h +0 -1
- package/SVF-osx/include/MemoryModel/PointerAnalysis.h +2 -7
- package/SVF-osx/include/MemoryModel/PointerAnalysisImpl.h +5 -1
- package/SVF-osx/include/MemoryModel/PointsTo.h +2 -1
- package/SVF-osx/include/MemoryModel/SVFLoop.h +4 -1
- package/SVF-osx/include/SABER/ProgSlice.h +0 -1
- package/SVF-osx/include/SABER/SaberCheckerAPI.h +1 -2
- package/SVF-osx/include/SABER/SaberSVFGBuilder.h +5 -1
- package/SVF-osx/include/SABER/SrcSnkDDA.h +1 -1
- package/SVF-osx/include/SVF-LLVM/LLVMLoopAnalysis.h +0 -1
- package/SVF-osx/include/SVF-LLVM/LLVMUtil.h +2 -0
- package/SVF-osx/include/SVFIR/ObjTypeInfo.h +3 -2
- package/SVF-osx/include/SVFIR/PAGBuilderFromFile.h +1 -0
- package/SVF-osx/include/SVFIR/SVFIR.h +3 -1
- package/SVF-osx/include/SVFIR/SVFStatements.h +1 -0
- package/SVF-osx/include/SVFIR/SVFType.h +0 -59
- package/SVF-osx/include/SVFIR/SVFValue.h +2 -3
- package/SVF-osx/include/SVFIR/SVFVariables.h +7 -1
- package/SVF-osx/include/Util/CDGBuilder.h +8 -2
- package/SVF-osx/include/Util/CallGraphBuilder.h +0 -2
- package/SVF-osx/include/Util/CoreBitVector.h +1 -1
- package/SVF-osx/include/Util/CxtStmt.h +0 -2
- package/SVF-osx/include/Util/DPItem.h +2 -1
- package/SVF-osx/include/Util/ExtAPI.h +3 -4
- package/SVF-osx/include/Util/GeneralType.h +52 -48
- package/SVF-osx/include/Util/Hash.h +56 -0
- package/SVF-osx/include/Util/NodeIDAllocator.h +1 -1
- package/SVF-osx/include/Util/Options.h +0 -1
- package/SVF-osx/include/Util/PTAStat.h +3 -4
- package/SVF-osx/include/Util/SVFBugReport.h +7 -9
- package/SVF-osx/include/Util/SVFLoopAndDomInfo.h +7 -4
- package/SVF-osx/include/Util/SVFStat.h +1 -0
- package/SVF-osx/include/Util/SVFUtil.h +5 -5
- package/SVF-osx/include/Util/SparseBitVector.h +13 -0
- package/SVF-osx/include/Util/ThreadAPI.h +1 -1
- package/SVF-osx/include/Util/WorkList.h +2 -2
- package/SVF-osx/include/Util/Z3Expr.h +1 -1
- package/SVF-osx/include/WPA/Andersen.h +3 -3
- package/SVF-osx/include/WPA/AndersenPWC.h +2 -1
- package/SVF-osx/include/WPA/CSC.h +5 -5
- package/SVF-osx/include/WPA/FlowSensitive.h +1 -2
- package/SVF-osx/include/WPA/Steensgaard.h +5 -0
- package/SVF-osx/include/WPA/TypeAnalysis.h +5 -0
- package/SVF-osx/include/WPA/VersionedFlowSensitive.h +1 -4
- package/SVF-osx/include/WPA/WPAFSSolver.h +1 -0
- package/SVF-osx/include/WPA/WPAPass.h +5 -1
- package/SVF-osx/include/WPA/WPASolver.h +1 -0
- package/SVF-osx/include/WPA/WPAStat.h +1 -0
- package/SVF-osx/lib/cmake/SVF/SVFTargets.cmake +1 -1
- package/SVF-osx/lib/extapi.bc +2 -2
- package/SVF-osx/lib/libSvfCore.3.4.dylib +0 -0
- package/SVF-osx/lib/libSvfLLVM.3.4.dylib +0 -0
- package/package.json +1 -1
|
@@ -30,13 +30,14 @@
|
|
|
30
30
|
#ifndef TCTNodeDetector_H_
|
|
31
31
|
#define TCTNodeDetector_H_
|
|
32
32
|
|
|
33
|
+
#include <vector>
|
|
34
|
+
|
|
33
35
|
#include "MemoryModel/PointerAnalysis.h"
|
|
34
36
|
#include "Graphs/SCC.h"
|
|
35
37
|
#include "Graphs/ThreadCallGraph.h"
|
|
36
38
|
#include "Util/CxtStmt.h"
|
|
39
|
+
#include "Util/GeneralType.h"
|
|
37
40
|
#include "Util/SVFUtil.h"
|
|
38
|
-
#include <set>
|
|
39
|
-
#include <vector>
|
|
40
41
|
|
|
41
42
|
namespace SVF
|
|
42
43
|
{
|
|
@@ -33,13 +33,17 @@
|
|
|
33
33
|
#ifndef AccessPath_H_
|
|
34
34
|
#define AccessPath_H_
|
|
35
35
|
|
|
36
|
+
#include <utility>
|
|
37
|
+
#include <vector>
|
|
36
38
|
|
|
37
|
-
#include "
|
|
38
|
-
|
|
39
|
+
#include "Util/GeneralType.h"
|
|
40
|
+
#include "Util/Hash.h"
|
|
39
41
|
|
|
40
42
|
namespace SVF
|
|
41
43
|
{
|
|
42
44
|
|
|
45
|
+
class SVFStructType;
|
|
46
|
+
class SVFType;
|
|
43
47
|
class SVFVar;
|
|
44
48
|
class ValVar;
|
|
45
49
|
|
|
@@ -34,13 +34,8 @@
|
|
|
34
34
|
#include <signal.h>
|
|
35
35
|
|
|
36
36
|
#include "Graphs/CHG.h"
|
|
37
|
-
#include "Graphs/
|
|
37
|
+
#include "Graphs/CallGraph.h"
|
|
38
38
|
#include "Graphs/SCC.h"
|
|
39
|
-
#include "MemoryModel/AbstractPointsToDS.h"
|
|
40
|
-
#include "MemoryModel/ConditionalPT.h"
|
|
41
|
-
#include "MemoryModel/MutablePointsToDS.h"
|
|
42
|
-
#include "MemoryModel/PersistentPointsToDS.h"
|
|
43
|
-
#include "MemoryModel/PointsTo.h"
|
|
44
39
|
#include "MemoryModel/PTATY.h"
|
|
45
40
|
#include "SVFIR/SVFIR.h"
|
|
46
41
|
|
|
@@ -48,9 +43,9 @@ namespace SVF
|
|
|
48
43
|
{
|
|
49
44
|
|
|
50
45
|
class CommonCHGraph;
|
|
51
|
-
|
|
52
46
|
class ICFG;
|
|
53
47
|
class PTAStat;
|
|
48
|
+
|
|
54
49
|
/*
|
|
55
50
|
* Pointer Analysis Base Class
|
|
56
51
|
*/
|
|
@@ -30,9 +30,13 @@
|
|
|
30
30
|
#ifndef INCLUDE_MEMORYMODEL_POINTERANALYSISIMPL_H_
|
|
31
31
|
#define INCLUDE_MEMORYMODEL_POINTERANALYSISIMPL_H_
|
|
32
32
|
|
|
33
|
-
#include
|
|
33
|
+
#include "Graphs/ConsG.h"
|
|
34
34
|
#include "MemoryModel/PTATY.h"
|
|
35
35
|
#include "MemoryModel/PointerAnalysis.h"
|
|
36
|
+
#include "MemoryModel/AbstractPointsToDS.h"
|
|
37
|
+
#include "MemoryModel/MutablePointsToDS.h"
|
|
38
|
+
#include "MemoryModel/PersistentPointsToDS.h"
|
|
39
|
+
#include "MemoryModel/ConditionalPT.h"
|
|
36
40
|
|
|
37
41
|
namespace SVF
|
|
38
42
|
{
|
|
@@ -12,9 +12,10 @@
|
|
|
12
12
|
#ifndef POINTSTO_H_
|
|
13
13
|
#define POINTSTO_H_
|
|
14
14
|
|
|
15
|
+
#include <memory>
|
|
15
16
|
#include <vector>
|
|
16
17
|
|
|
17
|
-
#include "
|
|
18
|
+
#include "Util/GeneralType.h"
|
|
18
19
|
#include "Util/BitVector.h"
|
|
19
20
|
#include "Util/CoreBitVector.h"
|
|
20
21
|
#include "Util/SparseBitVector.h"
|
|
@@ -30,15 +30,19 @@
|
|
|
30
30
|
#ifndef SABERSVFGBUILDER_H_
|
|
31
31
|
#define SABERSVFGBUILDER_H_
|
|
32
32
|
|
|
33
|
+
#include "Graphs/SVFG.h"
|
|
33
34
|
#include "MSSA/SVFGBuilder.h"
|
|
34
|
-
#include "
|
|
35
|
+
#include "Util/GeneralType.h"
|
|
35
36
|
#include "Util/WorkList.h"
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
namespace SVF
|
|
39
40
|
{
|
|
40
41
|
|
|
42
|
+
class BVDataPTAImpl;
|
|
43
|
+
class CallICFGNode;
|
|
41
44
|
class SaberCondAllocator;
|
|
45
|
+
class ValVar;
|
|
42
46
|
|
|
43
47
|
class SaberSVFGBuilder : public SVFGBuilder
|
|
44
48
|
{
|
|
@@ -30,12 +30,13 @@
|
|
|
30
30
|
#ifndef INCLUDE_SVFIR_OBJTYPEINFO_H_
|
|
31
31
|
#define INCLUDE_SVFIR_OBJTYPEINFO_H_
|
|
32
32
|
|
|
33
|
+
#include "Util/GeneralType.h"
|
|
33
34
|
|
|
34
|
-
#include "Util/SVFUtil.h"
|
|
35
|
-
#include "MemoryModel/AccessPath.h"
|
|
36
35
|
namespace SVF
|
|
37
36
|
{
|
|
38
37
|
|
|
38
|
+
class SVFType;
|
|
39
|
+
|
|
39
40
|
/*!
|
|
40
41
|
* Type Info of an abstract memory object
|
|
41
42
|
*/
|
|
@@ -30,7 +30,10 @@
|
|
|
30
30
|
#ifndef INCLUDE_SVFIR_H_
|
|
31
31
|
#define INCLUDE_SVFIR_H_
|
|
32
32
|
|
|
33
|
+
#include "Graphs/ICFG.h"
|
|
33
34
|
#include "Graphs/IRGraph.h"
|
|
35
|
+
#include "Util/GeneralType.h"
|
|
36
|
+
#include "Util/SVFUtil.h"
|
|
34
37
|
|
|
35
38
|
namespace SVF
|
|
36
39
|
{
|
|
@@ -44,7 +47,6 @@ class SVFIR : public IRGraph
|
|
|
44
47
|
friend class SVFIRBuilder;
|
|
45
48
|
friend class ExternalPAG;
|
|
46
49
|
friend class PAGBuilderFromFile;
|
|
47
|
-
friend class TypeBasedHeapCloning;
|
|
48
50
|
friend class BVDataPTAImpl;
|
|
49
51
|
friend class GraphDBClient;
|
|
50
52
|
friend class GraphDBSVFIRBuilder;
|
|
@@ -30,10 +30,8 @@
|
|
|
30
30
|
#ifndef INCLUDE_SVFIR_SVFTYPE_H_
|
|
31
31
|
#define INCLUDE_SVFIR_SVFTYPE_H_
|
|
32
32
|
|
|
33
|
-
#include "Util/SparseBitVector.h"
|
|
34
33
|
#include "Util/GeneralType.h"
|
|
35
34
|
|
|
36
|
-
|
|
37
35
|
namespace SVF
|
|
38
36
|
{
|
|
39
37
|
class SVFType;
|
|
@@ -557,21 +555,6 @@ public:
|
|
|
557
555
|
void print(std::ostream& os) const override;
|
|
558
556
|
};
|
|
559
557
|
|
|
560
|
-
// TODO: be explicit that this is a pair of 32-bit unsigneds?
|
|
561
|
-
template <> struct Hash<NodePair>
|
|
562
|
-
{
|
|
563
|
-
size_t operator()(const NodePair& p) const
|
|
564
|
-
{
|
|
565
|
-
// Make sure our assumptions are sound: use u32_t
|
|
566
|
-
// and u64_t. If NodeID is not actually u32_t or size_t
|
|
567
|
-
// is not u64_t we should be fine since we get a
|
|
568
|
-
// consistent result.
|
|
569
|
-
uint32_t first = (uint32_t)(p.first);
|
|
570
|
-
uint32_t second = (uint32_t)(p.second);
|
|
571
|
-
return ((uint64_t)(first) << 32) | (uint64_t)(second);
|
|
572
|
-
}
|
|
573
|
-
};
|
|
574
|
-
|
|
575
558
|
#if !defined NDBUG && defined USE_SVF_DBOUT
|
|
576
559
|
// TODO: This comes from the following link
|
|
577
560
|
// https://github.com/llvm/llvm-project/blob/75e33f71c2dae584b13a7d1186ae0a038ba98838/llvm/include/llvm/Support/Debug.h#L64
|
|
@@ -642,46 +625,4 @@ enum AliasResult
|
|
|
642
625
|
|
|
643
626
|
} // End namespace SVF
|
|
644
627
|
|
|
645
|
-
template <> struct std::hash<SVF::NodePair>
|
|
646
|
-
{
|
|
647
|
-
size_t operator()(const SVF::NodePair& p) const
|
|
648
|
-
{
|
|
649
|
-
// Make sure our assumptions are sound: use u32_t
|
|
650
|
-
// and u64_t. If NodeID is not actually u32_t or size_t
|
|
651
|
-
// is not u64_t we should be fine since we get a
|
|
652
|
-
// consistent result.
|
|
653
|
-
uint32_t first = (uint32_t)(p.first);
|
|
654
|
-
uint32_t second = (uint32_t)(p.second);
|
|
655
|
-
return ((uint64_t)(first) << 32) | (uint64_t)(second);
|
|
656
|
-
}
|
|
657
|
-
};
|
|
658
|
-
|
|
659
|
-
/// Specialise hash for SparseBitVectors.
|
|
660
|
-
template <unsigned N> struct std::hash<SVF::SparseBitVector<N>>
|
|
661
|
-
{
|
|
662
|
-
size_t operator()(const SVF::SparseBitVector<N>& sbv) const
|
|
663
|
-
{
|
|
664
|
-
SVF::Hash<std::pair<std::pair<size_t, size_t>, size_t>> h;
|
|
665
|
-
return h(std::make_pair(std::make_pair(sbv.count(), sbv.find_first()),
|
|
666
|
-
sbv.find_last()));
|
|
667
|
-
}
|
|
668
|
-
};
|
|
669
|
-
|
|
670
|
-
template <typename T> struct std::hash<std::vector<T>>
|
|
671
|
-
{
|
|
672
|
-
size_t operator()(const std::vector<T>& v) const
|
|
673
|
-
{
|
|
674
|
-
// TODO: repetition with CBV.
|
|
675
|
-
size_t h = v.size();
|
|
676
|
-
|
|
677
|
-
SVF::Hash<T> hf;
|
|
678
|
-
for (const T& t : v)
|
|
679
|
-
{
|
|
680
|
-
h ^= hf(t) + 0x9e3779b9 + (h << 6) + (h >> 2);
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
return h;
|
|
684
|
-
}
|
|
685
|
-
};
|
|
686
|
-
|
|
687
628
|
#endif /* INCLUDE_SVFIR_SVFTYPE_H_ */
|
|
@@ -32,13 +32,12 @@
|
|
|
32
32
|
#ifndef INCLUDE_SVFIR_SVFVALUE_H_
|
|
33
33
|
#define INCLUDE_SVFIR_SVFVALUE_H_
|
|
34
34
|
|
|
35
|
-
#include "
|
|
36
|
-
#include "Graphs/GraphPrinter.h"
|
|
37
|
-
|
|
35
|
+
#include "Util/GeneralType.h"
|
|
38
36
|
|
|
39
37
|
namespace SVF
|
|
40
38
|
{
|
|
41
39
|
|
|
40
|
+
class SVFType;
|
|
42
41
|
|
|
43
42
|
class SVFValue
|
|
44
43
|
{
|
|
@@ -32,14 +32,20 @@
|
|
|
32
32
|
#ifndef INCLUDE_SVFIR_SVFVARIABLE_H_
|
|
33
33
|
#define INCLUDE_SVFIR_SVFVARIABLE_H_
|
|
34
34
|
|
|
35
|
+
#include "Graphs/BasicBlockG.h"
|
|
35
36
|
#include "Graphs/GenericGraph.h"
|
|
36
37
|
#include "SVFIR/ObjTypeInfo.h"
|
|
37
38
|
#include "SVFIR/SVFStatements.h"
|
|
39
|
+
#include "Util/GeneralType.h"
|
|
40
|
+
#include "Util/SVFLoopAndDomInfo.h"
|
|
41
|
+
#include "Util/SVFUtil.h"
|
|
38
42
|
|
|
39
43
|
namespace SVF
|
|
40
44
|
{
|
|
41
45
|
|
|
46
|
+
class FunObjVar;
|
|
42
47
|
class SVFVar;
|
|
48
|
+
|
|
43
49
|
/*
|
|
44
50
|
* Program variables in SVFIR (based on PAG nodes)
|
|
45
51
|
* These represent variables in the program analysis graph
|
|
@@ -2322,4 +2328,4 @@ public:
|
|
|
2322
2328
|
|
|
2323
2329
|
} // End namespace SVF
|
|
2324
2330
|
|
|
2325
|
-
#endif /* INCLUDE_SVFIR_SVFVARIABLE_H_ */
|
|
2331
|
+
#endif /* INCLUDE_SVFIR_SVFVARIABLE_H_ */
|
|
@@ -30,11 +30,17 @@
|
|
|
30
30
|
#define SVF_CDGBUILDER_H
|
|
31
31
|
|
|
32
32
|
#include "Graphs/CDG.h"
|
|
33
|
-
#include "
|
|
33
|
+
#include "Util/GeneralType.h"
|
|
34
34
|
|
|
35
35
|
// control dependence builder
|
|
36
36
|
namespace SVF
|
|
37
37
|
{
|
|
38
|
+
|
|
39
|
+
class FunObjVar;
|
|
40
|
+
class ICFGNode;
|
|
41
|
+
class SVFBasicBlock;
|
|
42
|
+
class SVFLoopAndDomInfo;
|
|
43
|
+
|
|
38
44
|
class CDGBuilder
|
|
39
45
|
{
|
|
40
46
|
public:
|
|
@@ -104,4 +110,4 @@ private:
|
|
|
104
110
|
}
|
|
105
111
|
|
|
106
112
|
|
|
107
|
-
#endif //SVF_CDGBUILDER_H
|
|
113
|
+
#endif //SVF_CDGBUILDER_H
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
#define DPITEM_H_
|
|
32
32
|
|
|
33
33
|
#include "MemoryModel/ConditionalPT.h"
|
|
34
|
+
#include "Util/GeneralType.h"
|
|
34
35
|
#include <algorithm> // std::sort
|
|
35
36
|
|
|
36
37
|
namespace SVF
|
|
@@ -615,4 +616,4 @@ struct std::hash<SVF::ContextCond>
|
|
|
615
616
|
return h(cc.getContexts());
|
|
616
617
|
}
|
|
617
618
|
};
|
|
618
|
-
#endif /* DPITEM_H_ */
|
|
619
|
+
#endif /* DPITEM_H_ */
|
|
@@ -30,11 +30,10 @@
|
|
|
30
30
|
#ifndef __ExtAPI_H
|
|
31
31
|
#define __ExtAPI_H
|
|
32
32
|
|
|
33
|
-
#include "
|
|
34
|
-
|
|
33
|
+
#include "Util/GeneralType.h"
|
|
34
|
+
|
|
35
35
|
#include <string>
|
|
36
36
|
#include <vector>
|
|
37
|
-
#include <map>
|
|
38
37
|
|
|
39
38
|
/// For a more detailed explanation of how External APIs are handled in SVF, please refer to the SVF Wiki: https://github.com/SVF-tools/SVF/wiki/Handling-External-APIs-with-extapi.c
|
|
40
39
|
|
|
@@ -115,4 +114,4 @@ private:
|
|
|
115
114
|
};
|
|
116
115
|
} // End namespace SVF
|
|
117
116
|
|
|
118
|
-
#endif
|
|
117
|
+
#endif
|
|
@@ -38,57 +38,12 @@
|
|
|
38
38
|
#include <unordered_map>
|
|
39
39
|
#include <unordered_set>
|
|
40
40
|
#include <vector>
|
|
41
|
-
|
|
41
|
+
|
|
42
|
+
#include "Util/Hash.h"
|
|
42
43
|
#include "Util/SparseBitVector.h"
|
|
43
44
|
|
|
44
45
|
namespace SVF
|
|
45
46
|
{
|
|
46
|
-
typedef std::ostream OutStream;
|
|
47
|
-
typedef unsigned u32_t;
|
|
48
|
-
typedef signed s32_t;
|
|
49
|
-
typedef unsigned long long u64_t;
|
|
50
|
-
typedef signed long long s64_t;
|
|
51
|
-
typedef unsigned char u8_t;
|
|
52
|
-
typedef signed char s8_t;
|
|
53
|
-
typedef unsigned short u16_t;
|
|
54
|
-
typedef signed short s16_t;
|
|
55
|
-
|
|
56
|
-
typedef u32_t NodeID;
|
|
57
|
-
typedef u32_t EdgeID;
|
|
58
|
-
typedef unsigned CallSiteID;
|
|
59
|
-
typedef unsigned ThreadID;
|
|
60
|
-
typedef s64_t APOffset;
|
|
61
|
-
|
|
62
|
-
typedef SparseBitVector<> NodeBS;
|
|
63
|
-
typedef unsigned PointsToID;
|
|
64
|
-
|
|
65
|
-
/// provide extra hash function for std::pair handling
|
|
66
|
-
template <class T> struct Hash;
|
|
67
|
-
|
|
68
|
-
template <class S, class T> struct Hash<std::pair<S, T>>
|
|
69
|
-
{
|
|
70
|
-
// Pairing function from: http://szudzik.com/ElegantPairing.pdf
|
|
71
|
-
static size_t szudzik(size_t a, size_t b)
|
|
72
|
-
{
|
|
73
|
-
return a > b ? b * b + a : a * a + a + b;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
size_t operator()(const std::pair<S, T>& t) const
|
|
77
|
-
{
|
|
78
|
-
Hash<decltype(t.first)> first;
|
|
79
|
-
Hash<decltype(t.second)> second;
|
|
80
|
-
return szudzik(first(t.first), second(t.second));
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
template <class T> struct Hash
|
|
85
|
-
{
|
|
86
|
-
size_t operator()(const T& t) const
|
|
87
|
-
{
|
|
88
|
-
std::hash<T> h;
|
|
89
|
-
return h(t);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
47
|
|
|
93
48
|
template <typename Key, typename Hash = Hash<Key>,
|
|
94
49
|
typename KeyEqual = std::equal_to<Key>,
|
|
@@ -108,6 +63,25 @@ template <typename Key, typename Value, typename Hash = Hash<Key>,
|
|
|
108
63
|
typename Allocator = std::allocator<std::pair<const Key, Value>>>
|
|
109
64
|
using OrderedMap = std::map<Key, Value, Compare, Allocator>;
|
|
110
65
|
|
|
66
|
+
typedef std::ostream OutStream;
|
|
67
|
+
typedef unsigned u32_t;
|
|
68
|
+
typedef signed s32_t;
|
|
69
|
+
typedef unsigned long long u64_t;
|
|
70
|
+
typedef signed long long s64_t;
|
|
71
|
+
typedef unsigned char u8_t;
|
|
72
|
+
typedef signed char s8_t;
|
|
73
|
+
typedef unsigned short u16_t;
|
|
74
|
+
typedef signed short s16_t;
|
|
75
|
+
|
|
76
|
+
typedef u32_t NodeID;
|
|
77
|
+
typedef u32_t EdgeID;
|
|
78
|
+
typedef unsigned CallSiteID;
|
|
79
|
+
typedef unsigned ThreadID;
|
|
80
|
+
typedef s64_t APOffset;
|
|
81
|
+
|
|
82
|
+
typedef SparseBitVector<> NodeBS;
|
|
83
|
+
typedef unsigned PointsToID;
|
|
84
|
+
|
|
111
85
|
typedef std::pair<NodeID, NodeID> NodePair;
|
|
112
86
|
typedef OrderedSet<NodeID> OrderedNodeSet;
|
|
113
87
|
typedef Set<NodeID> NodeSet;
|
|
@@ -124,4 +98,34 @@ template <typename Key, typename Value, typename Hash = Hash<Key>,
|
|
|
124
98
|
typedef Set<Version> VersionSet;
|
|
125
99
|
typedef std::pair<NodeID, Version> VersionedVar;
|
|
126
100
|
typedef Set<VersionedVar> VersionedVarSet;
|
|
127
|
-
|
|
101
|
+
|
|
102
|
+
// TODO: be explicit that this is a pair of 32-bit unsigneds?
|
|
103
|
+
template <> struct Hash<NodePair>
|
|
104
|
+
{
|
|
105
|
+
size_t operator()(const NodePair& p) const
|
|
106
|
+
{
|
|
107
|
+
// Make sure our assumptions are sound: use u32_t
|
|
108
|
+
// and u64_t. If NodeID is not actually u32_t or size_t
|
|
109
|
+
// is not u64_t we should be fine since we get a
|
|
110
|
+
// consistent result.
|
|
111
|
+
uint32_t first = (uint32_t)(p.first);
|
|
112
|
+
uint32_t second = (uint32_t)(p.second);
|
|
113
|
+
return ((uint64_t)(first) << 32) | (uint64_t)(second);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
} // namespace SVF
|
|
118
|
+
|
|
119
|
+
template <> struct std::hash<SVF::NodePair>
|
|
120
|
+
{
|
|
121
|
+
size_t operator()(const SVF::NodePair& p) const
|
|
122
|
+
{
|
|
123
|
+
// Make sure our assumptions are sound: use u32_t
|
|
124
|
+
// and u64_t. If NodeID is not actually u32_t or size_t
|
|
125
|
+
// is not u64_t we should be fine since we get a
|
|
126
|
+
// consistent result.
|
|
127
|
+
uint32_t first = (uint32_t)(p.first);
|
|
128
|
+
uint32_t second = (uint32_t)(p.second);
|
|
129
|
+
return ((uint64_t)(first) << 32) | (uint64_t)(second);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#ifndef Hash_H
|
|
2
|
+
#define Hash_H
|
|
3
|
+
|
|
4
|
+
#include <vector>
|
|
5
|
+
|
|
6
|
+
namespace SVF
|
|
7
|
+
{
|
|
8
|
+
|
|
9
|
+
/// provide extra hash function for std::pair handling
|
|
10
|
+
template <class T> struct Hash;
|
|
11
|
+
|
|
12
|
+
template <class S, class T> struct Hash<std::pair<S, T>>
|
|
13
|
+
{
|
|
14
|
+
// Pairing function from: http://szudzik.com/ElegantPairing.pdf
|
|
15
|
+
static size_t szudzik(size_t a, size_t b)
|
|
16
|
+
{
|
|
17
|
+
return a > b ? b * b + a : a * a + a + b;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
size_t operator()(const std::pair<S, T>& t) const
|
|
21
|
+
{
|
|
22
|
+
Hash<decltype(t.first)> first;
|
|
23
|
+
Hash<decltype(t.second)> second;
|
|
24
|
+
return szudzik(first(t.first), second(t.second));
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
template <class T> struct Hash
|
|
29
|
+
{
|
|
30
|
+
size_t operator()(const T& t) const
|
|
31
|
+
{
|
|
32
|
+
std::hash<T> h;
|
|
33
|
+
return h(t);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
} // namespace SVF
|
|
38
|
+
|
|
39
|
+
template <typename T> struct std::hash<std::vector<T>>
|
|
40
|
+
{
|
|
41
|
+
size_t operator()(const std::vector<T>& v) const
|
|
42
|
+
{
|
|
43
|
+
// TODO: repetition with CBV.
|
|
44
|
+
size_t h = v.size();
|
|
45
|
+
|
|
46
|
+
SVF::Hash<T> hf;
|
|
47
|
+
for (const T& t : v)
|
|
48
|
+
{
|
|
49
|
+
h ^= hf(t) + 0x9e3779b9 + (h << 6) + (h >> 2);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return h;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
#endif // Hash_H
|