svf-tools 1.0.613 → 1.0.615
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/CMakeLists.txt +13 -0
- package/SVF-doxygen/html/html/AndersenPWC_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +7 -6
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/Andersen_8h_source.html +16 -16
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +7 -7
- package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/CFLGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +14 -14
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ConsG_8h_source.html +9 -9
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +9 -9
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +4 -6
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +22 -22
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +21 -21
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +27 -28
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +65 -65
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ICFG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +24 -29
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +8 -8
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/MHP_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +12 -17
- package/SVF-doxygen/html/html/MTA_8h_source.html +3 -4
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +34 -34
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +7 -7
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +16 -15
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +53 -52
- package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +7 -8
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/Options_8cpp_source.html +52 -53
- package/SVF-doxygen/html/html/Options_8h_source.html +53 -54
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +33 -33
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +91 -95
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +31 -39
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +85 -92
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +16 -16
- package/SVF-doxygen/html/html/PointsTo_8cpp.html +1 -0
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +51 -51
- package/SVF-doxygen/html/html/PointsTo_8h_source.html +38 -38
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SCC_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +11 -22
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +14 -17
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +21 -19
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +49 -62
- package/SVF-doxygen/html/html/SVFG_8h_source.html +45 -45
- package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +10 -16
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +83 -83
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +19 -19
- package/SVF-doxygen/html/html/SVFType_8h.html +22 -22
- package/SVF-doxygen/html/html/SVFType_8h_source.html +76 -77
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +11 -11
- package/SVF-doxygen/html/html/SVFValue_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +6 -6
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -3
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +69 -71
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +39 -39
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +49 -51
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +13 -13
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/TCT_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/VFG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +33 -33
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +4 -4
- package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +11 -11
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +2 -2
- package/SVF-doxygen/html/html/WPASolver_8h_source.html +25 -25
- package/SVF-doxygen/html/html/Z3Expr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/cfl_8cpp.html +1 -5
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -5
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +187 -188
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +104 -107
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +163 -164
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +47 -50
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +194 -195
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +45 -48
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +204 -205
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +35 -38
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +191 -192
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +29 -32
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +122 -123
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +158 -219
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +137 -138
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +57 -49
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase-members.html +138 -139
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF-members.html +140 -141
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallSite-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +114 -114
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +17 -31
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +40 -40
- package/SVF-doxygen/html/html/classSVF_1_1DFPTData.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1DiffPTData.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +228 -229
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +62 -65
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +194 -195
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +55 -55
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +219 -220
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +335 -342
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +57 -57
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +20 -14
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +108 -94
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +87 -87
- package/SVF-doxygen/html/html/classSVF_1_1MTA-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +27 -33
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder-members.html +41 -43
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +57 -80
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +54 -54
- package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +170 -143
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MutableDiffPTData-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MutableDiffPTData.html +13 -15
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +17 -18
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +53 -79
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PTData.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData-members.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +174 -177
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData-members.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +99 -102
- package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData-members.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +125 -127
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData-members.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +83 -86
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +122 -122
- package/SVF-doxygen/html/html/classSVF_1_1PersistentVersionedPTData-members.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1PersistentVersionedPTData.html +137 -140
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +56 -56
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo-members.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +183 -178
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator-members.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +87 -65
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection_1_1GNodeSCCInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFArgument-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFArgument.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFArrayType.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +13 -16
- package/SVF-doxygen/html/html/classSVF_1_1SVFBlackHoleValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFBlackHoleValue.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstant-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstant.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantData-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantFP-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantFP.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantInt-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantInt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantNullPtr-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantNullPtr.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +5 -7
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunctionType.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +211 -236
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder-members.html +7 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +50 -138
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +82 -82
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobalValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobalValue.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +203 -215
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +79 -79
- package/SVF-doxygen/html/html/classSVF_1_1SVFInstruction-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFInstruction.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIntergerType.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFLoopAndDomInfo-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFLoopAndDomInfo.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFMetadataAsValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFMetadataAsValue.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +0 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFOtherType.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFOtherValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFOtherValue.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFPointerType.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1SVFStructType.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFType.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +4 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFVirtualCallInst-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFVirtualCallInst.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +12 -14
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +42 -68
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +108 -109
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html +50 -50
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +146 -146
- package/SVF-doxygen/html/html/classSVF_1_1StInfo-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +48 -61
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +178 -179
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +35 -38
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +42 -46
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +169 -170
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +31 -34
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +263 -264
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +112 -115
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +41 -41
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedPTData.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +76 -81
- package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +2 -2
- package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/functions.html +1 -1
- package/SVF-doxygen/html/html/functions_0x7e.html +16 -16
- package/SVF-doxygen/html/html/functions_a.html +7 -7
- package/SVF-doxygen/html/html/functions_b.html +6 -6
- package/SVF-doxygen/html/html/functions_c.html +27 -27
- package/SVF-doxygen/html/html/functions_d.html +10 -11
- package/SVF-doxygen/html/html/functions_e.html +2 -2
- package/SVF-doxygen/html/html/functions_f.html +6 -6
- package/SVF-doxygen/html/html/functions_func.html +6 -6
- package/SVF-doxygen/html/html/functions_func_0x7e.html +16 -16
- package/SVF-doxygen/html/html/functions_func_b.html +6 -6
- package/SVF-doxygen/html/html/functions_func_c.html +27 -27
- package/SVF-doxygen/html/html/functions_func_d.html +10 -11
- package/SVF-doxygen/html/html/functions_func_e.html +2 -2
- package/SVF-doxygen/html/html/functions_func_f.html +5 -5
- package/SVF-doxygen/html/html/functions_func_g.html +22 -22
- package/SVF-doxygen/html/html/functions_func_h.html +3 -3
- package/SVF-doxygen/html/html/functions_func_i.html +3 -3
- package/SVF-doxygen/html/html/functions_func_o.html +3 -3
- package/SVF-doxygen/html/html/functions_func_p.html +5 -5
- package/SVF-doxygen/html/html/functions_func_r.html +5 -8
- package/SVF-doxygen/html/html/functions_func_s.html +6 -6
- package/SVF-doxygen/html/html/functions_func_t.html +1 -1
- package/SVF-doxygen/html/html/functions_func_u.html +23 -23
- package/SVF-doxygen/html/html/functions_g.html +25 -28
- package/SVF-doxygen/html/html/functions_h.html +3 -3
- package/SVF-doxygen/html/html/functions_i.html +6 -6
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_o.html +13 -13
- package/SVF-doxygen/html/html/functions_p.html +19 -19
- package/SVF-doxygen/html/html/functions_r.html +11 -12
- package/SVF-doxygen/html/html/functions_s.html +33 -36
- package/SVF-doxygen/html/html/functions_t.html +12 -12
- package/SVF-doxygen/html/html/functions_type_t.html +1 -1
- package/SVF-doxygen/html/html/functions_u.html +26 -23
- package/SVF-doxygen/html/html/functions_v.html +6 -6
- package/SVF-doxygen/html/html/functions_vars.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_i.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_m.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_p.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_s.html +5 -8
- package/SVF-doxygen/html/html/functions_vars_t.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_u.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +3 -7
- package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +35 -35
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +2 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +4 -4
- package/SVF-doxygen/html/html/saber_8cpp.html +1 -5
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -5
- package/SVF-doxygen/html/html/search/all_0.js +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +4 -4
- package/SVF-doxygen/html/html/search/all_10.js +15 -15
- package/SVF-doxygen/html/html/search/all_11.js +1 -2
- package/SVF-doxygen/html/html/search/all_12.js +20 -21
- package/SVF-doxygen/html/html/search/all_13.js +8 -8
- package/SVF-doxygen/html/html/search/all_14.js +13 -12
- package/SVF-doxygen/html/html/search/all_15.js +4 -4
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_19.js +16 -16
- package/SVF-doxygen/html/html/search/all_2.js +6 -6
- package/SVF-doxygen/html/html/search/all_3.js +14 -14
- package/SVF-doxygen/html/html/search/all_4.js +5 -5
- package/SVF-doxygen/html/html/search/all_5.js +2 -2
- package/SVF-doxygen/html/html/search/all_6.js +5 -5
- package/SVF-doxygen/html/html/search/all_7.js +11 -12
- package/SVF-doxygen/html/html/search/all_8.js +3 -3
- package/SVF-doxygen/html/html/search/all_9.js +4 -4
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +3 -3
- package/SVF-doxygen/html/html/search/all_d.js +3 -3
- package/SVF-doxygen/html/html/search/all_e.js +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +5 -5
- package/SVF-doxygen/html/html/search/functions_0.js +4 -4
- package/SVF-doxygen/html/html/search/functions_1.js +6 -6
- package/SVF-doxygen/html/html/search/functions_10.js +1 -2
- package/SVF-doxygen/html/html/search/functions_11.js +11 -11
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +12 -12
- package/SVF-doxygen/html/html/search/functions_17.js +16 -16
- package/SVF-doxygen/html/html/search/functions_2.js +14 -14
- package/SVF-doxygen/html/html/search/functions_3.js +5 -5
- package/SVF-doxygen/html/html/search/functions_4.js +2 -2
- package/SVF-doxygen/html/html/search/functions_5.js +4 -4
- package/SVF-doxygen/html/html/search/functions_6.js +11 -11
- package/SVF-doxygen/html/html/search/functions_7.js +3 -3
- package/SVF-doxygen/html/html/search/functions_8.js +3 -3
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +3 -3
- package/SVF-doxygen/html/html/search/functions_f.js +5 -5
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/variables_0.js +1 -1
- package/SVF-doxygen/html/html/search/variables_10.js +2 -2
- package/SVF-doxygen/html/html/search/variables_12.js +5 -6
- package/SVF-doxygen/html/html/search/variables_13.js +3 -3
- package/SVF-doxygen/html/html/search/variables_14.js +1 -0
- package/SVF-doxygen/html/html/search/variables_6.js +1 -1
- package/SVF-doxygen/html/html/search/variables_7.js +0 -1
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +14 -14
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01NodePair_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement-members.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement.html +47 -57
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1NodePair_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1PointsTo_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +5 -5
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +3 -3
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +6 -7
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/build.sh +2 -2
- package/include/DDA/DDAPass.h +1 -1
- package/include/DDA/FlowDDA.h +1 -1
- package/include/Graphs/ICFG.h +1 -1
- package/include/Graphs/SVFG.h +3 -4
- package/include/Graphs/SVFGOPT.h +7 -7
- package/include/MSSA/MemSSA.h +2 -0
- package/include/MSSA/SVFGBuilder.h +5 -14
- package/include/MTA/MTA.h +2 -2
- package/include/MemoryModel/MutablePointsToDS.h +3 -3
- package/include/MemoryModel/PersistentPointsToCache.h +7 -8
- package/include/MemoryModel/PersistentPointsToDS.h +93 -93
- package/include/MemoryModel/PointerAnalysisImpl.h +17 -28
- package/include/MemoryModel/PointsTo.h +24 -24
- package/include/SABER/SrcSnkDDA.h +10 -13
- package/include/SVF-LLVM/LLVMLoopAnalysis.h +2 -1
- package/include/SVF-LLVM/LLVMModule.h +6 -6
- package/include/SVFIR/SVFIR.h +3 -5
- package/include/SVFIR/SVFType.h +6 -8
- package/include/SVFIR/SVFValue.h +5 -5
- package/include/Util/Options.h +0 -1
- package/include/Util/SparseBitVector.h +6 -14
- package/include/WPA/FlowSensitive.h +13 -20
- package/include/WPA/WPASolver.h +5 -9
- package/lib/DDA/DDAPass.cpp +4 -4
- package/lib/Graphs/CFLGraph.cpp +3 -0
- package/lib/Graphs/SVFG.cpp +1 -1
- package/lib/MSSA/MemSSA.cpp +5 -3
- package/lib/MSSA/SVFGBuilder.cpp +9 -27
- package/lib/MTA/MTA.cpp +4 -4
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +10 -10
- package/lib/MemoryModel/PointsTo.cpp +23 -19
- package/lib/SVF-LLVM/LLVMLoopAnalysis.cpp +3 -4
- package/lib/SVF-LLVM/LLVMModule.cpp +32 -21
- package/lib/SVFIR/SVFIR.cpp +1 -1
- package/lib/SVFIR/SymbolTableInfo.cpp +4 -15
- package/lib/Util/Options.cpp +0 -6
- package/lib/WPA/AndersenSFR.cpp +1 -1
- package/lib/WPA/FlowSensitive.cpp +1 -1
- package/package.json +1 -1
- package/tools/CFL/cfl.cpp +5 -4
- package/tools/DDA/dda.cpp +3 -2
- package/tools/Example/svf-ex.cpp +3 -2
- package/tools/MTA/mta.cpp +6 -4
- package/tools/SABER/saber.cpp +7 -5
- package/tools/WPA/wpa.cpp +3 -2
|
@@ -66,104 +66,102 @@ $(function() {
|
|
|
66
66
|
<div class="title">SparseBitVector.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="SparseBitVector_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- SparseBitVector.h - Efficient Sparse BitVector --*- C++ -*-===//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// From the LLVM Project with some modifications, under the Apache License v2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// with LLVM Exceptions. See https://llvm.org/LICENSE.txt for license information.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#ifndef SPARSEBITVECTOR_H</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#define SPARSEBITVECTOR_H</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <ostream></span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <cassert></span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <cstring></span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <climits></span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <limits></span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <iterator></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <list></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// Appease GCC?</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifdef __has_builtin</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># define HAS_CLZ __has_builtin(__builtin_clz)</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># define HAS_CLZLL __has_builtin(__builtin_clzll)</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="SparseBitVector_8h.html#aa4aed82d501b04499090de2c616e6b1f"> 24</a></span> <span class="preprocessor"># define HAS_CLZ 0</span></div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="SparseBitVector_8h.html#ad66fb43b1e40d6e22629fcd889d4bfab"> 25</a></span> <span class="preprocessor"># define HAS_CLZLL 0</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349"> 32</a></span> <span class="keyword">enum</span> <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54"> 35</a></span>  <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54">ZB_Undefined</a>,</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349aac378e728f7d53b2d96be1d33c63afb1"> 37</a></span>  <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349aac378e728f7d53b2d96be1d33c63afb1">ZB_Max</a>,</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7"> 39</a></span>  <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7">ZB_Width</a></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> };</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="structSVF_1_1TrailingZerosCounter.html"> 42</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> SizeOfT> <span class="keyword">struct </span><a class="code" href="structSVF_1_1TrailingZerosCounter.html">TrailingZerosCounter</a></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83"> 44</a></span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83">count</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a>)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (!Val)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> std::numeric_limits<T>::digits;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">if</span> (Val & 0x1)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="comment">// Bisection method.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordtype">unsigned</span> ZeroBits = 0;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  T Shift = std::numeric_limits<T>::digits >> 1;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  T Mask = std::numeric_limits<T>::max() >> Shift;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">while</span> (Shift)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> ((Val & Mask) == 0)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  Val >>= Shift;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  ZeroBits |= Shift;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  Shift >>= 1;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  Mask >>= Shift;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">return</span> ZeroBits;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> };</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461"> 77</a></span> <span class="keywordtype">unsigned</span> <a class="code" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">countTrailingZeros</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a> ZB = <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7">ZB_Width</a>)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  static_assert(std::numeric_limits<T>::is_integer &&</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  !std::numeric_limits<T>::is_signed,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="stringliteral">"Only unsigned integral types are allowed."</span>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1TrailingZerosCounter.html">TrailingZerosCounter<T, sizeof(T)>::count</a>(Val, ZB);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structSVF_1_1PopulationCounter.html"> 85</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> SizeOfT> <span class="keyword">struct </span><a class="code" href="structSVF_1_1PopulationCounter.html">PopulationCounter</a></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structSVF_1_1PopulationCounter.html#aa49a07f6be7991ffe42af5445b38d59b"> 87</a></span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1PopulationCounter.html#aa49a07f6be7991ffe42af5445b38d59b">count</a>(T <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// Generic version, forward to 32 bits.</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  static_assert(SizeOfT <= 4, <span class="stringliteral">"Not implemented!"</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> __builtin_popcount(Value);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  uint32_t v = <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  v = v - ((v >> 1) & 0x55555555);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  v = (v & 0x33333333) + ((v >> 2) & 0x33333333);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> };</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="structSVF_1_1LeadingZerosCounter.html"> 102</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> SizeOfT> <span class="keyword">struct </span><a class="code" href="structSVF_1_1LeadingZerosCounter.html">LeadingZerosCounter</a></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structSVF_1_1LeadingZerosCounter.html#ad85fa905e96374d79a832a027226d8d3"> 104</a></span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1LeadingZerosCounter.html#ad85fa905e96374d79a832a027226d8d3">count</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a>)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">if</span> (!Val)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> std::numeric_limits<T>::digits;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="comment">// Bisection method.</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">unsigned</span> ZeroBits = 0;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">for</span> (T Shift = std::numeric_limits<T>::digits >> 1; Shift; Shift >>= 1)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  T Tmp = Val >> Shift;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (Tmp)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  Val = Tmp;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  ZeroBits |= Shift;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> ZeroBits;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">#if defined(__GNUC__) || defined(_MSC_VER)</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structSVF_1_1LeadingZerosCounter.html">LeadingZerosCounter</a><T, 4></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83">count</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a> ZB)</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (ZB != <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54">ZB_Undefined</a> && Val == 0)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> 32;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#if defined(__GNUC__) || HAS_CLZ</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> __builtin_clz(Val);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Index;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  _BitScanReverse(&Index, Val);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> Index ^ 31;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor">#if !defined(_MSC_VER) || defined(_M_X64)</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structSVF_1_1LeadingZerosCounter.html">LeadingZerosCounter</a><T, 8></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83">count</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a> ZB)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> (ZB != <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54">ZB_Undefined</a> && Val == 0)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">return</span> 64;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#if defined(__GNUC__) || HAS_CLZLL</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> __builtin_clzll(Val);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Index;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  _BitScanReverse64(&Index, Val);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">return</span> Index ^ 63;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> };</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af897f6692f1f6aa13d897f89b3370d0d"> 169</a></span> <span class="keywordtype">unsigned</span> <a class="code" href="namespaceSVF.html#af897f6692f1f6aa13d897f89b3370d0d">countLeadingZeros</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a> ZB = <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7">ZB_Width</a>)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  static_assert(std::numeric_limits<T>::is_integer &&</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  !std::numeric_limits<T>::is_signed,</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="stringliteral">"Only unsigned integral types are allowed."</span>);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1LeadingZerosCounter.html">LeadingZerosCounter<T, sizeof(T)>::count</a>(Val, ZB);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html"> 177</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structSVF_1_1PopulationCounter.html">PopulationCounter</a><T, 8></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html#a6b0aabdd55f93d2b5ea8df270a14a0ec"> 179</a></span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html#a6b0aabdd55f93d2b5ea8df270a14a0ec">count</a>(T <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">return</span> __builtin_popcountll(Value);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  uint64_t v = <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  v = v - ((v >> 1) & 0x5555555555555555ULL);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  v = (v & 0x3333333333333333ULL) + ((v >> 2) & 0x3333333333333333ULL);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  v = (v + (v >> 4)) & 0x0F0F0F0F0F0F0F0FULL;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">return</span> unsigned((uint64_t)(v * 0x0101010101010101ULL) >> 56);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> };</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ae86e9ecca38512426d0bade3a95d0a51"> 197</a></span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <a class="code" href="namespaceSVF.html#ae86e9ecca38512426d0bade3a95d0a51">countPopulation</a>(T <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>)</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  static_assert(std::numeric_limits<T>::is_integer &&</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  !std::numeric_limits<T>::is_signed,</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="stringliteral">"Only unsigned integral types are allowed."</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1PopulationCounter.html">PopulationCounter<T, sizeof(T)>::count</a>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html"> 217</a></span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize = 128> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d"> 220</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> = <span class="keywordtype">unsigned</span> long;</div><div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ad9e38352db094adcdfb2964f325d9e53"> 221</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ad9e38352db094adcdfb2964f325d9e53">size_type</a> = unsigned;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keyword">enum</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2dfc62db92b64481fe56fafaa923dce0a3335c07a7225c80110e998246f96d6c4"> 224</a></span>  BITWORD_SIZE = <span class="keyword">sizeof</span>(<a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a>) * CHAR_BIT,</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2dfc62db92b64481fe56fafaa923dce0a3dde12fdc7052a87d20741d2c31a65a3"> 225</a></span>  BITWORDS_PER_ELEMENT = (ElementSize + BITWORD_SIZE - 1) / BITWORD_SIZE,</div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2dfc62db92b64481fe56fafaa923dce0aeb226b2e0dea78fbdbf5b780c3745f6d"> 226</a></span>  BITS_PER_ELEMENT = ElementSize</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  };</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="comment">// Index of Element in terms of where first bit starts.</span></div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ae5c5ac3afef47499a4e852de0dc39c18"> 231</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae5c5ac3afef47499a4e852de0dc39c18">ElementIndex</a>;</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526"> 232</a></span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> Bits[BITWORDS_PER_ELEMENT];</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a4ec765790960025d3468866c326ab87b"> 234</a></span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4ec765790960025d3468866c326ab87b">SparseBitVectorElement</a>()</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  ElementIndex = ~0U;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  memset(&Bits[0], 0, <span class="keyword">sizeof</span> (<a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a>) * BITWORDS_PER_ELEMENT);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a75777b1461184d8fb2cfa4ec6e95c1c5"> 241</a></span>  <span class="keyword">explicit</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a75777b1461184d8fb2cfa4ec6e95c1c5">SparseBitVectorElement</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  ElementIndex = Idx;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  memset(&Bits[0], 0, <span class="keyword">sizeof</span> (<a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a>) * BITWORDS_PER_ELEMENT);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="comment">// Comparison.</span></div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a8484d923c29872843b0d0ffcebf4d112"> 248</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a8484d923c29872843b0d0ffcebf4d112">operator==</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">if</span> (ElementIndex != RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae5c5ac3afef47499a4e852de0dc39c18">ElementIndex</a>)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">if</span> (Bits[i] != RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i])</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#aa812f8538b869b004791b4177c50069b"> 258</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#aa812f8538b869b004791b4177c50069b">operator!=</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == RHS);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="comment">// Return the bits that make up word Idx in our element.</span></div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f"> 264</a></span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">word</a>(<span class="keywordtype">unsigned</span> Idx)<span class="keyword"> const</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  assert(Idx < BITWORDS_PER_ELEMENT);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">return</span> Bits[Idx];</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827"> 270</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">index</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span> ElementIndex;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ac3a4795681af74563d757f587252aa7f"> 275</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ac3a4795681af74563d757f587252aa7f">empty</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">if</span> (Bits[i])</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a094acafea02f3c117445267e75c9a629"> 283</a></span>  <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  Bits[Idx / BITWORD_SIZE] |= 1L << (Idx % BITWORD_SIZE);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a7a5d223870e32035863f6596727c6775"> 288</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a7a5d223870e32035863f6596727c6775">test_and_set</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordtype">bool</span> old = test(Idx);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">if</span> (!old)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">set</span>(Idx);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#acced4edf716af14a6931156d59e50632"> 299</a></span>  <span class="keywordtype">void</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#acced4edf716af14a6931156d59e50632">reset</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  Bits[Idx / BITWORD_SIZE] &= ~(1L << (Idx % BITWORD_SIZE));</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a465b415217533f1f0026bec837495fdd"> 304</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a465b415217533f1f0026bec837495fdd">test</a>(<span class="keywordtype">unsigned</span> Idx)<span class="keyword"> const</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> Bits[Idx / BITWORD_SIZE] & (1L << (Idx % BITWORD_SIZE));</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a8ed9ca88c7eef7574a9887197b422e81"> 309</a></span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ad9e38352db094adcdfb2964f325d9e53">size_type</a> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a8ed9ca88c7eef7574a9887197b422e81">count</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordtype">unsigned</span> NumBits = 0;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  NumBits += <a class="code" href="namespaceSVF.html#ae86e9ecca38512426d0bade3a95d0a51">countPopulation</a>(Bits[i]);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> NumBits;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2281ff5a0a492064cff864d4c246cbc2"> 318</a></span>  <span class="keywordtype">int</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a2281ff5a0a492064cff864d4c246cbc2">find_first</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">return</span> i * BITWORD_SIZE + <a class="code" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">countTrailingZeros</a>(Bits[i]);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"SBV: find_first: SBV cannot be empty"</span>);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  abort();</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a1d79c099887fcf01f5c0743b38caf39d"> 328</a></span>  <span class="keywordtype">int</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a1d79c099887fcf01f5c0743b38caf39d">find_last</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> I = 0; I < BITWORDS_PER_ELEMENT; ++I)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordtype">unsigned</span> Idx = BITWORDS_PER_ELEMENT - I - 1;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">if</span> (Bits[Idx] != 0)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> Idx * BITWORD_SIZE + BITWORD_SIZE -</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="namespaceSVF.html#af897f6692f1f6aa13d897f89b3370d0d">countLeadingZeros</a>(Bits[Idx]) - 1;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"SBV: find_last: SBV cannot be empty"</span>);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  abort();</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a60a023744119cd0424511ea1e83b76e1"> 343</a></span>  <span class="keywordtype">int</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a60a023744119cd0424511ea1e83b76e1">find_next</a>(<span class="keywordtype">unsigned</span> Curr)<span class="keyword"> const</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">if</span> (Curr >= BITS_PER_ELEMENT)</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordtype">unsigned</span> WordPos = Curr / BITWORD_SIZE;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordtype">unsigned</span> BitPos = Curr % BITWORD_SIZE;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> Copy = Bits[WordPos];</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  assert(WordPos <= BITWORDS_PER_ELEMENT</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  && <span class="stringliteral">"Word Position outside of element"</span>);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="comment">// Mask off previous bits.</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  Copy &= ~0UL << BitPos;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span> (Copy != 0)</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">return</span> WordPos * BITWORD_SIZE + <a class="code" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">countTrailingZeros</a>(Copy);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="comment">// Check subsequent words.</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = WordPos+1; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> i * BITWORD_SIZE + <a class="code" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">countTrailingZeros</a>(Bits[i]);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  }</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="comment">// Union this element with RHS and return true if this one changed.</span></div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a34e70705e4618e6d79a19ee7725e4960"> 368</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a34e70705e4618e6d79a19ee7725e4960">unionWith</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> old = changed ? 0 : Bits[i];</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  Bits[i] |= RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i];</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">if</span> (!changed && old != Bits[i])</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  }</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="comment">// Return true if we have any bits in common with RHS</span></div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2ac6b33e335ac411740c875c6aeb6706"> 383</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a2ac6b33e335ac411740c875c6aeb6706">intersects</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordflow">if</span> (RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i] & Bits[i])</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="comment">// Intersect this Element with RHS and return true if this one changed.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="comment">// BecameZero is set to true if this element became all-zero bits.</span></div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2f62812b261a83b19aab46c0961bfcb4"> 395</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a2f62812b261a83b19aab46c0961bfcb4">intersectWith</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS,</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordtype">bool</span> &BecameZero)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordtype">bool</span> allzero = <span class="keyword">true</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  BecameZero = <span class="keyword">false</span>;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> old = changed ? 0 : Bits[i];</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  Bits[i] &= RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i];</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  allzero = <span class="keyword">false</span>;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">if</span> (!changed && old != Bits[i])</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  BecameZero = allzero;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="comment">// Intersect this Element with the complement of RHS and return true if this</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="comment">// one changed. BecameZero is set to true if this element became all-zero</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="comment">// bits.</span></div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ac721b283253b7bd96fedd5f12c079699"> 420</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ac721b283253b7bd96fedd5f12c079699">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS,</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordtype">bool</span> &BecameZero)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordtype">bool</span> allzero = <span class="keyword">true</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  BecameZero = <span class="keyword">false</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> old = changed ? 0 : Bits[i];</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  Bits[i] &= ~RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i];</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  allzero = <span class="keyword">false</span>;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">if</span> (!changed && old != Bits[i])</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  BecameZero = allzero;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="comment">// Three argument version of intersectWithComplement that intersects</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="comment">// RHS1 & ~RHS2 into this element</span></div><div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a6d81176f07f369b38da34e624710b387"> 444</a></span>  <span class="keywordtype">void</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a6d81176f07f369b38da34e624710b387">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS1,</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS2,</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordtype">bool</span> &BecameZero)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordtype">bool</span> allzero = <span class="keyword">true</span>;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  BecameZero = <span class="keyword">false</span>;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  Bits[i] = RHS1.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i] & ~RHS2.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i];</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  allzero = <span class="keyword">false</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  BecameZero = allzero;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> };</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize = 128></div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html"> 462</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> {</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a74ab73c1674200bb4560070c8b10346d"> 464</a></span>  <span class="keyword">using</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a74ab73c1674200bb4560070c8b10346d">ElementList</a> = std::list<SparseBitVectorElement<ElementSize>>;</div><div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed"> 465</a></span>  <span class="keyword">using</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> = <span class="keyword">typename</span> ElementList::iterator;</div><div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f"> 466</a></span>  <span class="keyword">using</span> <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> = <span class="keyword">typename</span> ElementList::const_iterator;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keyword">enum</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  {</div><div class="line"><a name="l00469"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ab0a250ed14fc688ffb38c8f00aca0bd4a887a4856f51078b02a23348b7331453e"> 469</a></span>  BITWORD_SIZE = <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement<ElementSize>::BITWORD_SIZE</a></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  };</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div><div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636"> 472</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a74ab73c1674200bb4560070c8b10346d">ElementList</a> <a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="comment">// Pointer to our current Element. This has no visible effect on the external</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="comment">// state of a SparseBitVector, it's just used to improve performance in the</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="comment">// common case of testing/modifying bits with similar indices.</span></div><div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ada7cb2e144c2fccd0d50138778b152dd"> 476</a></span>  <span class="keyword">mutable</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> <a class="code" href="classSVF_1_1SparseBitVector.html#ada7cb2e144c2fccd0d50138778b152dd">CurrElementIter</a>;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="comment">// This is like std::lower_bound, except we do linear searching from the</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="comment">// current position.</span></div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ad53d20775e5445a438f579743aa77cf3"> 480</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> <a class="code" href="classSVF_1_1SparseBitVector.html#ad53d20775e5445a438f579743aa77cf3">FindLowerBoundImpl</a>(<span class="keywordtype">unsigned</span> ElementIndex)<span class="keyword"> const</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="comment">// We cache a non-const iterator so we're forced to resort to const_cast to</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="comment">// get the begin/end in the case where 'this' is const. To avoid duplication</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="comment">// of code with the only difference being whether the const cast is present</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="comment">// 'this' is always const in this particular function and we sort out the</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="comment">// difference in FindLowerBound and FindLowerBoundConst.</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> Begin =</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *<span class="keyword">></span>(<span class="keyword">this</span>)->Elements.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>();</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> End =</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *<span class="keyword">></span>(<span class="keyword">this</span>)->Elements.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>();</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  CurrElementIter = Begin;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">return</span> CurrElementIter;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="comment">// Make sure our current iterator is valid.</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">if</span> (CurrElementIter == End)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  --CurrElementIter;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="comment">// Search from our current iterator, either backwards or forwards,</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="comment">// depending on what element we are looking for.</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> ElementIter = CurrElementIter;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">if</span> (CurrElementIter->index() == ElementIndex)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">return</span> ElementIter;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (CurrElementIter->index() > ElementIndex)</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">while</span> (ElementIter != Begin</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  && ElementIter->index() > ElementIndex)</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  --ElementIter;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordflow">while</span> (ElementIter != End &&</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  ElementIter->index() < ElementIndex)</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  ++ElementIter;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  CurrElementIter = ElementIter;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">return</span> ElementIter;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  }</div><div class="line"><a name="l00525"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ab4787f96a5f7cab926f9c7426aa92fc1"> 525</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> <a class="code" href="classSVF_1_1SparseBitVector.html#ab4787f96a5f7cab926f9c7426aa92fc1">FindLowerBoundConst</a>(<span class="keywordtype">unsigned</span> ElementIndex)<span class="keyword"> const</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">return</span> FindLowerBoundImpl(ElementIndex);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  }</div><div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#aaac61c8dd5477ecc6e76c664bf45c0b0"> 529</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> <a class="code" href="classSVF_1_1SparseBitVector.html#aaac61c8dd5477ecc6e76c664bf45c0b0">FindLowerBound</a>(<span class="keywordtype">unsigned</span> ElementIndex)</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">return</span> FindLowerBoundImpl(ElementIndex);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="comment">// Iterator to walk set bits in the bitmap. This iterator is a lot uglier</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="comment">// than it would be, in order to be efficient.</span></div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html"> 536</a></span>  <span class="keyword">class </span><a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab"> 539</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab">AtEnd</a>;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aba51f4b0022c38b89f9fa519cf25fb3f"> 541</a></span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *<a class="code" href="classSVF_1_1BitVector.html">BitVector</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="comment">// Current element inside of bitmap.</span></div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a3627077086baa18bd0ae25efd981c18f"> 544</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a3627077086baa18bd0ae25efd981c18f">Iter</a>;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">// Current bit number inside of our bitmap.</span></div><div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aae6ff6aada3863feb736619d4f8dba16"> 547</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aae6ff6aada3863feb736619d4f8dba16">BitNumber</a>;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="comment">// Current word number inside of our element.</span></div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6b139db78c9cba017df0fa468bee713a"> 550</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6b139db78c9cba017df0fa468bee713a">WordNumber</a>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="comment">// Current bits from the element.</span></div><div class="line"><a name="l00553"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#abc3768e05459a1d0a2d2220858a7a53d"> 553</a></span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">SparseBitVectorElement<ElementSize>::BitWord</a> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#abc3768e05459a1d0a2d2220858a7a53d">Bits</a>;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="comment">// Move our iterator to the first non-zero bit in the bitmap.</span></div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5e213fe330a23d22c8cf2b0624f73de7"> 556</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5e213fe330a23d22c8cf2b0624f73de7">AdvanceToFirstNonZero</a>()</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">if</span> (AtEnd)</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">if</span> (BitVector-><a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  {</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  AtEnd = <span class="keyword">true</span>;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  Iter = BitVector-><a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  BitNumber = Iter->index() * ElementSize;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordtype">unsigned</span> BitPos = Iter->find_first();</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  BitNumber += BitPos;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  WordNumber = (BitNumber % ElementSize) / BITWORD_SIZE;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  Bits = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">word</a>(WordNumber);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  Bits >>= BitPos % BITWORD_SIZE;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  }</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="comment">// Move our iterator to the next non-zero bit.</span></div><div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a346d500f11666f4746237f42a8d67fc1"> 575</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a346d500f11666f4746237f42a8d67fc1">AdvanceToNextNonZero</a>()</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  {</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">if</span> (AtEnd)</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">while</span> (Bits && !(Bits & 1))</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  Bits >>= 1;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  BitNumber += 1;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="comment">// See if we ran out of Bits in this word.</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">if</span> (!Bits)</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordtype">int</span> NextSetBitNumber = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#a60a023744119cd0424511ea1e83b76e1">find_next</a>(BitNumber % ElementSize) ;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="comment">// If we ran out of set bits in this element, move to next element.</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">if</span> (NextSetBitNumber == -1 || (BitNumber % ElementSize == 0))</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  ++Iter;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  WordNumber = 0;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="comment">// We may run out of elements in the bitmap.</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">if</span> (Iter == BitVector-><a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  AtEnd = <span class="keyword">true</span>;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  }</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="comment">// Set up for next non-zero word in bitmap.</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  BitNumber = Iter->index() * ElementSize;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  NextSetBitNumber = Iter->find_first();</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  BitNumber += NextSetBitNumber;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  WordNumber = (BitNumber % ElementSize) / BITWORD_SIZE;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  Bits = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">word</a>(WordNumber);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  Bits >>= NextSetBitNumber % BITWORD_SIZE;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  WordNumber = (NextSetBitNumber % ElementSize) / BITWORD_SIZE;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  Bits = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">word</a>(WordNumber);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  Bits >>= NextSetBitNumber % BITWORD_SIZE;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  BitNumber = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">index</a>() * ElementSize;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  BitNumber += NextSetBitNumber;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  }</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5fe4841ca223f13c2aeec4c6e69a7b43"> 624</a></span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5fe4841ca223f13c2aeec4c6e69a7b43">SparseBitVectorIterator</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS,</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordtype">bool</span> end = <span class="keyword">false</span>):BitVector(RHS)</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  Iter = BitVector-><a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  BitNumber = 0;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  Bits = 0;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  WordNumber = ~0;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  AtEnd = end;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  AdvanceToFirstNonZero();</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="comment">// Preincrement.</span></div><div class="line"><a name="l00636"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6638115d9d80e0f7b0cff50e06ccd891"> 636</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a>& <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6638115d9d80e0f7b0cff50e06ccd891">operator++</a>()</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  ++BitNumber;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  Bits >>= 1;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  AdvanceToNextNonZero();</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  }</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="comment">// Postincrement.</span></div><div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a9615a441805796b993252866e5a971aa"> 645</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a9615a441805796b993252866e5a971aa">operator++</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a> tmp = *<span class="keyword">this</span>;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  ++*<span class="keyword">this</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  }</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="comment">// Return the current set bit number.</span></div><div class="line"><a name="l00653"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#ab1f0f55fdfef6b2d64d0a715483f5da4"> 653</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#ab1f0f55fdfef6b2d64d0a715483f5da4">operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">return</span> BitNumber;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div><div class="line"><a name="l00658"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a7fc92990c6a09c33c3676ab47807bc68"> 658</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a7fc92990c6a09c33c3676ab47807bc68">operator==</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="comment">// If they are both at the end, ignore the rest of the fields.</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span> (AtEnd && RHS.<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab">AtEnd</a>)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="comment">// Otherwise they are the same if they have the same bit number and</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="comment">// bitmap.</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keywordflow">return</span> AtEnd == RHS.<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab">AtEnd</a> && RHS.<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aae6ff6aada3863feb736619d4f8dba16">BitNumber</a> == BitNumber;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  }</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span> </div><div class="line"><a name="l00668"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5448a6bdf09ef6a45d7c8e84648221ea"> 668</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5448a6bdf09ef6a45d7c8e84648221ea">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == RHS);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  }</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  };</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span> </div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c"> 675</a></span>  <span class="keyword">using</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a> = <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a>;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span> </div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a4f618377a31eba119de672b0be4936bc"> 677</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a4f618377a31eba119de672b0be4936bc">SparseBitVector</a>() : Elements(), CurrElementIter(Elements.begin()) {}</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> </div><div class="line"><a name="l00679"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a9cb4261779da0cbeb8d09b8fbd5cf557"> 679</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a9cb4261779da0cbeb8d09b8fbd5cf557">SparseBitVector</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  : Elements(RHS.Elements), CurrElementIter(Elements.begin()) {}</div><div class="line"><a name="l00681"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a786b5d4d9eb3cf4ec738043fc17e34c0"> 681</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a786b5d4d9eb3cf4ec738043fc17e34c0">SparseBitVector</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &&RHS)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  : Elements(<a class="code" href="namespacestd.html">std</a>::<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">move</a>(RHS.Elements)), CurrElementIter(Elements.begin()) {}</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="comment">// Clear.</span></div><div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a5afe3e74412a1f3f728d7e0eaae70c13"> 685</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a5afe3e74412a1f3f728d7e0eaae70c13">clear</a>()</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  Elements.clear();</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="comment">// Assignment</span></div><div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#adeed46c25650bdbccdef0519906d1030"> 691</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a>& <a class="code" href="classSVF_1_1SparseBitVector.html#adeed46c25650bdbccdef0519906d1030">operator=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a>& RHS)</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS)</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  Elements = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  }</div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a74ded252b99e70cb999b869a5250948e"> 700</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &<a class="code" href="classSVF_1_1SparseBitVector.html#a74ded252b99e70cb999b869a5250948e">operator=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &&RHS)</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  {</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  Elements = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(RHS.Elements);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  }</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="comment">// Test, Reset, and Set a bit in the bitmap.</span></div><div class="line"><a name="l00708"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80"> 708</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(<span class="keywordtype">unsigned</span> Idx)<span class="keyword"> const</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span> </div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keywordtype">unsigned</span> ElementIndex = Idx / ElementSize;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> ElementIter = FindLowerBoundConst(ElementIndex);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span> </div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="comment">// If we can't find an element that is supposed to contain this bit, there</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="comment">// is nothing more to do.</span></div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">if</span> (ElementIter == Elements.end() ||</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  ElementIter->index() != ElementIndex)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">return</span> ElementIter->test(Idx % ElementSize);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ad5337b5aeed50f8b7ffd56b14ee25c9f"> 724</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector.html#ad5337b5aeed50f8b7ffd56b14ee25c9f">reset</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  {</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordtype">unsigned</span> ElementIndex = Idx / ElementSize;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> ElementIter = FindLowerBound(ElementIndex);</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="comment">// If we can't find an element that is supposed to contain this bit, there</span></div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <span class="comment">// is nothing more to do.</span></div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">if</span> (ElementIter == Elements.end() ||</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  ElementIter->index() != ElementIndex)</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  ElementIter->reset(Idx % ElementSize);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="comment">// When the element is zeroed out, delete it.</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordflow">if</span> (ElementIter->empty())</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  ++CurrElementIter;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  Elements.erase(ElementIter);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span> </div><div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832"> 747</a></span>  <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordtype">unsigned</span> ElementIndex = Idx / ElementSize;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> ElementIter;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  ElementIter = Elements.emplace(Elements.end(), ElementIndex);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  {</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  ElementIter = FindLowerBound(ElementIndex);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">if</span> (ElementIter == Elements.end() ||</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  ElementIter->index() != ElementIndex)</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="comment">// We may have hit the beginning of our SparseBitVector, in which case,</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="comment">// we may need to insert right after this element, which requires moving</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="comment">// the current iterator forward one, because insert does insert before.</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">if</span> (ElementIter != Elements.end() &&</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  ElementIter->index() < ElementIndex)</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  ++ElementIter;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  ElementIter = Elements.emplace(ElementIter, ElementIndex);</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  CurrElementIter = ElementIter;</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span> </div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  ElementIter->set(Idx % ElementSize);</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span> </div><div class="line"><a name="l00776"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a355247d17d1c17b857b4ee572e19b91f"> 776</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a355247d17d1c17b857b4ee572e19b91f">test_and_set</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  {</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordtype">bool</span> old = test(Idx);</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">if</span> (!old)</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  {</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="keyword">set</span>(Idx);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  }</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div><div class="line"><a name="l00787"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#abfb058304c4b174d162a94c0cc26d2f7"> 787</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#abfb058304c4b174d162a94c0cc26d2f7">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == RHS);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span> </div><div class="line"><a name="l00792"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a816d96bad46fde34b3848bf08dc6cdf5"> 792</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a816d96bad46fde34b3848bf08dc6cdf5">operator==</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span> </div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordflow">for</span> (; Iter1 != Elements.end() && Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end();</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  ++Iter1, ++Iter2)</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="keywordflow">if</span> (*Iter1 != *Iter2)</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  }</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="keywordflow">return</span> Iter1 == Elements.end() && Iter2 == RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end();</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  }</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="comment">// Union our bitmap with the RHS and return true if we changed.</span></div><div class="line"><a name="l00807"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a48668ff6f168162bd8f13cf860749090"> 807</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a48668ff6f168162bd8f13cf860749090">operator|=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS)</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span> </div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="comment">// If RHS is empty, we are done</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">if</span> (RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">while</span> (Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <span class="keywordflow">if</span> (Iter1 == Elements.end() || Iter1->index() > Iter2->index())</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  {</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  Elements.insert(Iter1, *Iter2);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  ++Iter2;</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  {</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  changed |= Iter1->unionWith(*Iter2);</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  ++Iter1;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  ++Iter2;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  {</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  ++Iter1;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  }</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  }</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="comment">// Intersect our bitmap with the RHS and return true if ours changed.</span></div><div class="line"><a name="l00844"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a1f7e6424f8bfc68589a9947b26e0b62f"> 844</a></span>  <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4">operator&=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  {</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS)</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span> </div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="comment">// Check if both bitmaps are empty.</span></div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">if</span> (Elements.empty() && RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> </div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="comment">// Loop through, intersecting as we go, erasing elements when necessary.</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="keywordflow">while</span> (Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  {</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keywordflow">if</span> (Iter1 == Elements.end())</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  {</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  }</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span> </div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keywordflow">if</span> (Iter1->index() > Iter2->index())</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  {</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  ++Iter2;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  }</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  {</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="keywordtype">bool</span> BecameZero;</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  changed |= Iter1->intersectWith(*Iter2, BecameZero);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">if</span> (BecameZero)</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> IterTmp = Iter1;</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  ++Iter1;</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  Elements.erase(IterTmp);</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  }</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  {</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  ++Iter1;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  ++Iter2;</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> IterTmp = Iter1;</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  ++Iter1;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  Elements.erase(IterTmp);</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  }</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="keywordflow">if</span> (Iter1 != Elements.end())</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  {</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  Elements.erase(Iter1, Elements.end());</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  }</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  }</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="comment">// Intersect our bitmap with the complement of the RHS and return true</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="comment">// if ours changed.</span></div><div class="line"><a name="l00905"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef"> 905</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  {</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS)</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  {</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordflow">if</span> (!empty())</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  {</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  clear();</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  }</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> </div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> </div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="comment">// If either our bitmap or RHS is empty, we are done</span></div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  <span class="keywordflow">if</span> (Elements.empty() || RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="comment">// Loop through, intersecting as we go, erasing elements when necessary.</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="keywordflow">while</span> (Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  {</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="keywordflow">if</span> (Iter1 == Elements.end())</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  {</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  }</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">if</span> (Iter1->index() > Iter2->index())</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  {</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  ++Iter2;</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  }</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  {</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="keywordtype">bool</span> BecameZero;</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  changed |= Iter1->intersectWithComplement(*Iter2, BecameZero);</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <span class="keywordflow">if</span> (BecameZero)</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  {</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> IterTmp = Iter1;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  ++Iter1;</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  Elements.erase(IterTmp);</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  }</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  {</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  ++Iter1;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  }</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  ++Iter2;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  }</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  {</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  ++Iter1;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  }</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  }</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  }</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span> </div><div class="line"><a name="l00963"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#aaab743995d5dd1359b0f541dacc1dcf3"> 963</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#aaab743995d5dd1359b0f541dacc1dcf3">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keywordflow">return</span> intersectWithComplement(*RHS);</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  }</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span> </div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="comment">// Three argument version of intersectWithComplement.</span></div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="comment">// Result of RHS1 & ~RHS2 is stored into this bitmap.</span></div><div class="line"><a name="l00970"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#afee44821475fa31f218fb743b264cb37"> 970</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector.html#afee44821475fa31f218fb743b264cb37">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS1,</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS2)</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS1)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  intersectWithComplement(RHS2);</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  }</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS2)</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  {</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> RHS2Copy(RHS2);</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  intersectWithComplement(RHS1, RHS2Copy);</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span> </div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  Elements.clear();</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter1 = RHS1.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS2.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="comment">// If RHS1 is empty, we are done</span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="comment">// If RHS2 is empty, we still have to copy RHS1</span></div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="keywordflow">if</span> (RHS1.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span> </div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="comment">// Loop through, intersecting as we go, erasing elements when necessary.</span></div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  <span class="keywordflow">while</span> (Iter2 != RHS2.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  {</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <span class="keywordflow">if</span> (Iter1 == RHS1.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="keywordflow">if</span> (Iter1->index() > Iter2->index())</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  {</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  ++Iter2;</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  }</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  {</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="keywordtype">bool</span> BecameZero = <span class="keyword">false</span>;</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  Elements.emplace_back(Iter1->index());</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  Elements.back().intersectWithComplement(*Iter1, *Iter2, BecameZero);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keywordflow">if</span> (BecameZero)</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  Elements.pop_back();</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  ++Iter1;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  ++Iter2;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  {</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  Elements.push_back(*Iter1++);</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  }</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  }</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="comment">// copy the remaining elements</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">std::copy</a>(Iter1, RHS1.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end(), std::back_inserter(Elements));</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div><div class="line"><a name="l01025"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a28d0e5b43ad556d079b5b0ec58e898e4"> 1025</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a28d0e5b43ad556d079b5b0ec58e898e4">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS1,</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS2)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  intersectWithComplement(*RHS1, *RHS2);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div><div class="line"><a name="l01031"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79"> 1031</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">intersects</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS)<span class="keyword"> const</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keywordflow">return</span> intersects(*RHS);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  }</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="comment">// Return true if we share any bits in common with RHS</span></div><div class="line"><a name="l01037"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a704fddd1bf7592e9df9fbc14c3873696"> 1037</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a704fddd1bf7592e9df9fbc14c3873696">intersects</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> </div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="comment">// Check if both bitmaps are empty.</span></div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keywordflow">if</span> (Elements.empty() && RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <span class="comment">// Loop through, intersecting stopping when we hit bits in common.</span></div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keywordflow">while</span> (Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="keywordflow">if</span> (Iter1 == Elements.end())</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  <span class="keywordflow">if</span> (Iter1->index() > Iter2->index())</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  {</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  ++Iter2;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  }</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  {</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <span class="keywordflow">if</span> (Iter1->intersects(*Iter2))</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  ++Iter1;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  ++Iter2;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  }</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  ++Iter1;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  }</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  }</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="comment">// Return true iff all bits set in this SparseBitVector are</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="comment">// also set in RHS.</span></div><div class="line"><a name="l01073"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8"> 1073</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">contains</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> Result(*<span class="keyword">this</span>);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  Result &= RHS;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <span class="keywordflow">return</span> (Result == RHS);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  }</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  <span class="comment">// Return the first set bit in the bitmap. Return -1 if no bits are set.</span></div><div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a06eeb5543eb160e08f9a41e30b52d963"> 1081</a></span>  <span class="keywordtype">int</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a06eeb5543eb160e08f9a41e30b52d963">find_first</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement<ElementSize></a> &First = *(Elements.begin());</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="keywordflow">return</span> (First.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">index</a>() * ElementSize) + First.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a2281ff5a0a492064cff864d4c246cbc2">find_first</a>();</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  }</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  <span class="comment">// Return the last set bit in the bitmap. Return -1 if no bits are set.</span></div><div class="line"><a name="l01090"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ac969500db9dbd1c63b6a47a1d9a5abba"> 1090</a></span>  <span class="keywordtype">int</span> <a class="code" href="classSVF_1_1SparseBitVector.html#ac969500db9dbd1c63b6a47a1d9a5abba">find_last</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement<ElementSize></a> &Last = *(Elements.rbegin());</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  <span class="keywordflow">return</span> (Last.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">index</a>() * ElementSize) + Last.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a1d79c099887fcf01f5c0743b38caf39d">find_last</a>();</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="comment">// Return true if the SparseBitVector is empty</span></div><div class="line"><a name="l01099"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#aea5389ad7e5fe4c8bef686940a1a6056"> 1099</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#aea5389ad7e5fe4c8bef686940a1a6056">empty</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <span class="keywordflow">return</span> Elements.empty();</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  }</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> </div><div class="line"><a name="l01104"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a9f96e6a886fa69e07cda5dbfaed8b7c9"> 1104</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a9f96e6a886fa69e07cda5dbfaed8b7c9">count</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  <span class="keywordtype">unsigned</span> BitCount = 0;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter = Elements.begin();</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  Iter != Elements.end();</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  ++Iter)</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  BitCount += Iter->count();</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <span class="keywordflow">return</span> BitCount;</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  }</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div><div class="line"><a name="l01115"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772"> 1115</a></span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a> <a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div><div class="line"><a name="l01120"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1"> 1120</a></span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a> <a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a>(<span class="keyword">this</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  }</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> };</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">// Convenience functions to allow Or and And without dereferencing in the user</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="comment">// code.</span></div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> </div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01130"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a97ff28f5dfd5c31e6ef351de3cdad85d"> 1130</a></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a97ff28f5dfd5c31e6ef351de3cdad85d">operator |=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS)</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keywordflow">return</span> LHS |= *RHS;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> }</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01137"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a7554dead3b2d1bcdfcb36c213e6735b6"> 1137</a></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a97ff28f5dfd5c31e6ef351de3cdad85d">operator |=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *LHS,</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> {</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="keywordflow">return</span> LHS->operator|=(RHS);</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> }</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01144"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4"> 1144</a></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4">operator &=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *LHS,</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> {</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordflow">return</span> LHS->operator&=(RHS);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> </div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01151"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a5df68020aca621b053acbe3f917f0809"> 1151</a></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4">operator &=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS)</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="keywordflow">return</span> LHS &= *RHS;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> }</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="comment">// Convenience functions for infix union, intersection, difference operators.</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> </div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a></div><div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ad16a5803e8f1fa06266223aeb8366df1"> 1161</a></span> <a class="code" href="namespaceSVF.html#abed4354cf0282ae30b8330c0e91008d8">operator|</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> {</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> Result(LHS);</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  Result |= RHS;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="keywordflow">return</span> Result;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a></div><div class="line"><a name="l01171"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a47b11c4e305a8a1e2dc387c2f9d4617e"> 1171</a></span> <a class="code" href="namespaceSVF.html#aeb5348e052254496cad4e036073c3941">operator&</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> {</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> Result(LHS);</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  Result &= RHS;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordflow">return</span> Result;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> }</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a></div><div class="line"><a name="l01181"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a1b6662f895cfd942996ac4d578960eed"> 1181</a></span> <a class="code" href="namespaceSVF.html#a4bddb7dbd28d3c0deb3cd35e48179a36">operator-</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> {</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> Result;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  Result.<a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(LHS, RHS);</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <span class="keywordflow">return</span> Result;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> }</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> </div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="comment">// Dump a SparseBitVector to a stream</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="namespaceSVF.html#aae350f79ebcb9efd22ec9efa6678cd13"> 1191</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF.html#aae350f79ebcb9efd22ec9efa6678cd13">dump</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS, std::ostream &out)</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> {</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  out << <span class="stringliteral">"["</span>;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  <span class="keyword">typename</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector<ElementSize>::iterator</a> bi = LHS.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(),</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  be = LHS.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>();</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">if</span> (bi != be)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  {</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  out << *bi;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <span class="keywordflow">for</span> (++bi; bi != be; ++bi)</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  {</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  out << <span class="stringliteral">" "</span> << *bi;</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  }</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  out << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> }</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> </div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="preprocessor">#endif // SPARSEBITVECTOR_H</span></div><div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SVF::SparseBitVector::SparseBitVectorIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00536">SparseBitVector.h:536</a></div></div>
|
|
70
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ac969500db9dbd1c63b6a47a1d9a5abba"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ac969500db9dbd1c63b6a47a1d9a5abba">SVF::SparseBitVector::find_last</a></div><div class="ttdeci">int find_last() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
71
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a2281ff5a0a492064cff864d4c246cbc2"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a2281ff5a0a492064cff864d4c246cbc2">SVF::SparseBitVectorElement::find_first</a></div><div class="ttdeci">int find_first() const</div><div class="ttdoc">find_first - Returns the index of the first set bit. </div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
69
|
+
<a href="SparseBitVector_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- SparseBitVector.h - Efficient Sparse BitVector --*- C++ -*-===//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// From the LLVM Project with some modifications, under the Apache License v2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// with LLVM Exceptions. See https://llvm.org/LICENSE.txt for license information.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#ifndef SPARSEBITVECTOR_H</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#define SPARSEBITVECTOR_H</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <ostream></span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <cassert></span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <cstring></span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <climits></span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <limits></span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <iterator></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <list></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// Appease GCC?</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifdef __has_builtin</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># define HAS_CLZ __has_builtin(__builtin_clz)</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># define HAS_CLZLL __has_builtin(__builtin_clzll)</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="SparseBitVector_8h.html#aa4aed82d501b04499090de2c616e6b1f"> 24</a></span> <span class="preprocessor"># define HAS_CLZ 0</span></div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="SparseBitVector_8h.html#ad66fb43b1e40d6e22629fcd889d4bfab"> 25</a></span> <span class="preprocessor"># define HAS_CLZLL 0</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349"> 32</a></span> <span class="keyword">enum</span> <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54"> 35</a></span>  <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54">ZB_Undefined</a>,</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349aac378e728f7d53b2d96be1d33c63afb1"> 37</a></span>  <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349aac378e728f7d53b2d96be1d33c63afb1">ZB_Max</a>,</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7"> 39</a></span>  <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7">ZB_Width</a></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> };</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="structSVF_1_1TrailingZerosCounter.html"> 42</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> SizeOfT> <span class="keyword">struct </span><a class="code" href="structSVF_1_1TrailingZerosCounter.html">TrailingZerosCounter</a></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83"> 44</a></span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83">count</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a>)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (!Val)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> std::numeric_limits<T>::digits;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">if</span> (Val & 0x1)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="comment">// Bisection method.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordtype">unsigned</span> ZeroBits = 0;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  T Shift = std::numeric_limits<T>::digits >> 1;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  T Mask = std::numeric_limits<T>::max() >> Shift;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">while</span> (Shift)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> ((Val & Mask) == 0)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  Val >>= Shift;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  ZeroBits |= Shift;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  Shift >>= 1;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  Mask >>= Shift;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">return</span> ZeroBits;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> };</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461"> 77</a></span> <span class="keywordtype">unsigned</span> <a class="code" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">countTrailingZeros</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a> ZB = <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7">ZB_Width</a>)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  static_assert(std::numeric_limits<T>::is_integer &&</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  !std::numeric_limits<T>::is_signed,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="stringliteral">"Only unsigned integral types are allowed."</span>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1TrailingZerosCounter.html">TrailingZerosCounter<T, sizeof(T)>::count</a>(Val, ZB);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structSVF_1_1PopulationCounter.html"> 85</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> SizeOfT> <span class="keyword">struct </span><a class="code" href="structSVF_1_1PopulationCounter.html">PopulationCounter</a></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structSVF_1_1PopulationCounter.html#aa49a07f6be7991ffe42af5445b38d59b"> 87</a></span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1PopulationCounter.html#aa49a07f6be7991ffe42af5445b38d59b">count</a>(T <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// Generic version, forward to 32 bits.</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  static_assert(SizeOfT <= 4, <span class="stringliteral">"Not implemented!"</span>);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> __builtin_popcount(Value);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  uint32_t v = <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  v = v - ((v >> 1) & 0x55555555);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  v = (v & 0x33333333) + ((v >> 2) & 0x33333333);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> };</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="structSVF_1_1LeadingZerosCounter.html"> 102</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> SizeOfT> <span class="keyword">struct </span><a class="code" href="structSVF_1_1LeadingZerosCounter.html">LeadingZerosCounter</a></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structSVF_1_1LeadingZerosCounter.html#ad85fa905e96374d79a832a027226d8d3"> 104</a></span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1LeadingZerosCounter.html#ad85fa905e96374d79a832a027226d8d3">count</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a>)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">if</span> (!Val)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> std::numeric_limits<T>::digits;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="comment">// Bisection method.</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">unsigned</span> ZeroBits = 0;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">for</span> (T Shift = std::numeric_limits<T>::digits >> 1; Shift; Shift >>= 1)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  T Tmp = Val >> Shift;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (Tmp)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  Val = Tmp;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  ZeroBits |= Shift;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> ZeroBits;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">#if defined(__GNUC__) || defined(_MSC_VER)</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structSVF_1_1LeadingZerosCounter.html">LeadingZerosCounter</a><T, 4></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83">count</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a> ZB)</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (ZB != <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54">ZB_Undefined</a> && Val == 0)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> 32;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#if defined(__GNUC__) || HAS_CLZ</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> __builtin_clz(Val);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Index;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  _BitScanReverse(&Index, Val);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> Index ^ 31;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor">#if !defined(_MSC_VER) || defined(_M_X64)</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structSVF_1_1LeadingZerosCounter.html">LeadingZerosCounter</a><T, 8></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83">count</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a> ZB)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> (ZB != <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54">ZB_Undefined</a> && Val == 0)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">return</span> 64;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#if defined(__GNUC__) || HAS_CLZLL</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> __builtin_clzll(Val);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Index;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  _BitScanReverse64(&Index, Val);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">return</span> Index ^ 63;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> };</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="namespaceSVF.html#af897f6692f1f6aa13d897f89b3370d0d"> 169</a></span> <span class="keywordtype">unsigned</span> <a class="code" href="namespaceSVF.html#af897f6692f1f6aa13d897f89b3370d0d">countLeadingZeros</a>(T Val, <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">ZeroBehavior</a> ZB = <a class="code" href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7">ZB_Width</a>)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  static_assert(std::numeric_limits<T>::is_integer &&</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  !std::numeric_limits<T>::is_signed,</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="stringliteral">"Only unsigned integral types are allowed."</span>);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1LeadingZerosCounter.html">LeadingZerosCounter<T, sizeof(T)>::count</a>(Val, ZB);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html"> 177</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structSVF_1_1PopulationCounter.html">PopulationCounter</a><T, 8></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html#a6b0aabdd55f93d2b5ea8df270a14a0ec"> 179</a></span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html#a6b0aabdd55f93d2b5ea8df270a14a0ec">count</a>(T <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">return</span> __builtin_popcountll(Value);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  uint64_t v = <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  v = v - ((v >> 1) & 0x5555555555555555ULL);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  v = (v & 0x3333333333333333ULL) + ((v >> 2) & 0x3333333333333333ULL);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  v = (v + (v >> 4)) & 0x0F0F0F0F0F0F0F0FULL;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">return</span> unsigned((uint64_t)(v * 0x0101010101010101ULL) >> 56);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> };</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ae86e9ecca38512426d0bade3a95d0a51"> 197</a></span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <a class="code" href="namespaceSVF.html#ae86e9ecca38512426d0bade3a95d0a51">countPopulation</a>(T <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>)</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  static_assert(std::numeric_limits<T>::is_integer &&</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  !std::numeric_limits<T>::is_signed,</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="stringliteral">"Only unsigned integral types are allowed."</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1PopulationCounter.html">PopulationCounter<T, sizeof(T)>::count</a>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html"> 217</a></span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize = 128> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d"> 220</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> = <span class="keywordtype">unsigned</span> long;</div><div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ad9e38352db094adcdfb2964f325d9e53"> 221</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ad9e38352db094adcdfb2964f325d9e53">size_type</a> = unsigned;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keyword">enum</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2dfc62db92b64481fe56fafaa923dce0a3335c07a7225c80110e998246f96d6c4"> 224</a></span>  BITWORD_SIZE = <span class="keyword">sizeof</span>(<a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a>) * CHAR_BIT,</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2dfc62db92b64481fe56fafaa923dce0a3dde12fdc7052a87d20741d2c31a65a3"> 225</a></span>  BITWORDS_PER_ELEMENT = (ElementSize + BITWORD_SIZE - 1) / BITWORD_SIZE,</div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2dfc62db92b64481fe56fafaa923dce0aeb226b2e0dea78fbdbf5b780c3745f6d"> 226</a></span>  BITS_PER_ELEMENT = ElementSize</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  };</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="comment">// Index of Element in terms of where first bit starts.</span></div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ae5c5ac3afef47499a4e852de0dc39c18"> 231</a></span>  <span class="keywordtype">unsigned</span> ElementIndex = 0;</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526"> 232</a></span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> Bits[BITWORDS_PER_ELEMENT] = {0};</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a75777b1461184d8fb2cfa4ec6e95c1c5"> 237</a></span>  <span class="keyword">explicit</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a75777b1461184d8fb2cfa4ec6e95c1c5">SparseBitVectorElement</a>(<span class="keywordtype">unsigned</span> Idx) : ElementIndex(Idx) {}</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="comment">// Comparison.</span></div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a8484d923c29872843b0d0ffcebf4d112"> 240</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a8484d923c29872843b0d0ffcebf4d112">operator==</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">if</span> (ElementIndex != RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae5c5ac3afef47499a4e852de0dc39c18">ElementIndex</a>)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (Bits[i] != RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i])</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#aa812f8538b869b004791b4177c50069b"> 250</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#aa812f8538b869b004791b4177c50069b">operator!=</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == RHS);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">// Return the bits that make up word Idx in our element.</span></div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f"> 256</a></span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">word</a>(<span class="keywordtype">unsigned</span> Idx)<span class="keyword"> const</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  assert(Idx < BITWORDS_PER_ELEMENT);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span> Bits[Idx];</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827"> 262</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">index</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">return</span> ElementIndex;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ac3a4795681af74563d757f587252aa7f"> 267</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ac3a4795681af74563d757f587252aa7f">empty</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">if</span> (Bits[i])</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a094acafea02f3c117445267e75c9a629"> 275</a></span>  <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  Bits[Idx / BITWORD_SIZE] |= 1L << (Idx % BITWORD_SIZE);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a7a5d223870e32035863f6596727c6775"> 280</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a7a5d223870e32035863f6596727c6775">test_and_set</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordtype">bool</span> old = test(Idx);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">if</span> (!old)</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">set</span>(Idx);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#acced4edf716af14a6931156d59e50632"> 291</a></span>  <span class="keywordtype">void</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#acced4edf716af14a6931156d59e50632">reset</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  Bits[Idx / BITWORD_SIZE] &= ~(1L << (Idx % BITWORD_SIZE));</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a465b415217533f1f0026bec837495fdd"> 296</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a465b415217533f1f0026bec837495fdd">test</a>(<span class="keywordtype">unsigned</span> Idx)<span class="keyword"> const</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">return</span> Bits[Idx / BITWORD_SIZE] & (1L << (Idx % BITWORD_SIZE));</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a8ed9ca88c7eef7574a9887197b422e81"> 301</a></span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ad9e38352db094adcdfb2964f325d9e53">size_type</a> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a8ed9ca88c7eef7574a9887197b422e81">count</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordtype">unsigned</span> NumBits = 0;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  NumBits += <a class="code" href="namespaceSVF.html#ae86e9ecca38512426d0bade3a95d0a51">countPopulation</a>(Bits[i]);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> NumBits;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2281ff5a0a492064cff864d4c246cbc2"> 310</a></span>  <span class="keywordtype">int</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a2281ff5a0a492064cff864d4c246cbc2">find_first</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> i * BITWORD_SIZE + <a class="code" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">countTrailingZeros</a>(Bits[i]);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"SBV: find_first: SBV cannot be empty"</span>);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  abort();</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a1d79c099887fcf01f5c0743b38caf39d"> 320</a></span>  <span class="keywordtype">int</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a1d79c099887fcf01f5c0743b38caf39d">find_last</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> I = 0; I < BITWORDS_PER_ELEMENT; ++I)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordtype">unsigned</span> Idx = BITWORDS_PER_ELEMENT - I - 1;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">if</span> (Bits[Idx] != 0)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">return</span> Idx * BITWORD_SIZE + BITWORD_SIZE -</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="namespaceSVF.html#af897f6692f1f6aa13d897f89b3370d0d">countLeadingZeros</a>(Bits[Idx]) - 1;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"SBV: find_last: SBV cannot be empty"</span>);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  abort();</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a60a023744119cd0424511ea1e83b76e1"> 335</a></span>  <span class="keywordtype">int</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a60a023744119cd0424511ea1e83b76e1">find_next</a>(<span class="keywordtype">unsigned</span> Curr)<span class="keyword"> const</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">if</span> (Curr >= BITS_PER_ELEMENT)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordtype">unsigned</span> WordPos = Curr / BITWORD_SIZE;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordtype">unsigned</span> BitPos = Curr % BITWORD_SIZE;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> Copy = Bits[WordPos];</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  assert(WordPos <= BITWORDS_PER_ELEMENT</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  && <span class="stringliteral">"Word Position outside of element"</span>);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="comment">// Mask off previous bits.</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  Copy &= ~0UL << BitPos;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">if</span> (Copy != 0)</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">return</span> WordPos * BITWORD_SIZE + <a class="code" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">countTrailingZeros</a>(Copy);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="comment">// Check subsequent words.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = WordPos+1; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">return</span> i * BITWORD_SIZE + <a class="code" href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">countTrailingZeros</a>(Bits[i]);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="comment">// Union this element with RHS and return true if this one changed.</span></div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a34e70705e4618e6d79a19ee7725e4960"> 360</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a34e70705e4618e6d79a19ee7725e4960">unionWith</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS)</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> old = changed ? 0 : Bits[i];</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  Bits[i] |= RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i];</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">if</span> (!changed && old != Bits[i])</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="comment">// Return true if we have any bits in common with RHS</span></div><div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2ac6b33e335ac411740c875c6aeb6706"> 375</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a2ac6b33e335ac411740c875c6aeb6706">intersects</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">if</span> (RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i] & Bits[i])</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="comment">// Intersect this Element with RHS and return true if this one changed.</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="comment">// BecameZero is set to true if this element became all-zero bits.</span></div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a2f62812b261a83b19aab46c0961bfcb4"> 387</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a2f62812b261a83b19aab46c0961bfcb4">intersectWith</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS,</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordtype">bool</span> &BecameZero)</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordtype">bool</span> allzero = <span class="keyword">true</span>;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  BecameZero = <span class="keyword">false</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> old = changed ? 0 : Bits[i];</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  Bits[i] &= RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i];</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  allzero = <span class="keyword">false</span>;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">if</span> (!changed && old != Bits[i])</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  BecameZero = allzero;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="comment">// Intersect this Element with the complement of RHS and return true if this</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="comment">// one changed. BecameZero is set to true if this element became all-zero</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="comment">// bits.</span></div><div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#ac721b283253b7bd96fedd5f12c079699"> 412</a></span>  <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#ac721b283253b7bd96fedd5f12c079699">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS,</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordtype">bool</span> &BecameZero)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordtype">bool</span> allzero = <span class="keyword">true</span>;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  BecameZero = <span class="keyword">false</span>;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">BitWord</a> old = changed ? 0 : Bits[i];</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  Bits[i] &= ~RHS.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i];</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  allzero = <span class="keyword">false</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">if</span> (!changed && old != Bits[i])</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  BecameZero = allzero;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="comment">// Three argument version of intersectWithComplement that intersects</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="comment">// RHS1 & ~RHS2 into this element</span></div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="structSVF_1_1SparseBitVectorElement.html#a6d81176f07f369b38da34e624710b387"> 436</a></span>  <span class="keywordtype">void</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#a6d81176f07f369b38da34e624710b387">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS1,</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement</a> &RHS2,</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordtype">bool</span> &BecameZero)</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordtype">bool</span> allzero = <span class="keyword">true</span>;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  BecameZero = <span class="keyword">false</span>;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < BITWORDS_PER_ELEMENT; ++i)</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  Bits[i] = RHS1.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i] & ~RHS2.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">Bits</a>[i];</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">if</span> (Bits[i] != 0)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  allzero = <span class="keyword">false</span>;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  BecameZero = allzero;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> };</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize = 128></div><div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html"> 454</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> {</div><div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a74ab73c1674200bb4560070c8b10346d"> 456</a></span>  <span class="keyword">using</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a74ab73c1674200bb4560070c8b10346d">ElementList</a> = std::list<SparseBitVectorElement<ElementSize>>;</div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed"> 457</a></span>  <span class="keyword">using</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> = <span class="keyword">typename</span> ElementList::iterator;</div><div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f"> 458</a></span>  <span class="keyword">using</span> <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> = <span class="keyword">typename</span> ElementList::const_iterator;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keyword">enum</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  {</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ab0a250ed14fc688ffb38c8f00aca0bd4a887a4856f51078b02a23348b7331453e"> 461</a></span>  BITWORD_SIZE = <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement<ElementSize>::BITWORD_SIZE</a></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  };</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636"> 464</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a74ab73c1674200bb4560070c8b10346d">ElementList</a> <a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="comment">// Pointer to our current Element. This has no visible effect on the external</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// state of a SparseBitVector, it's just used to improve performance in the</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// common case of testing/modifying bits with similar indices.</span></div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ada7cb2e144c2fccd0d50138778b152dd"> 468</a></span>  <span class="keyword">mutable</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> <a class="code" href="classSVF_1_1SparseBitVector.html#ada7cb2e144c2fccd0d50138778b152dd">CurrElementIter</a>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// This is like std::lower_bound, except we do linear searching from the</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// current position.</span></div><div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ad53d20775e5445a438f579743aa77cf3"> 472</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> <a class="code" href="classSVF_1_1SparseBitVector.html#ad53d20775e5445a438f579743aa77cf3">FindLowerBoundImpl</a>(<span class="keywordtype">unsigned</span> ElementIndex)<span class="keyword"> const</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="comment">// We cache a non-const iterator so we're forced to resort to const_cast to</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="comment">// get the begin/end in the case where 'this' is const. To avoid duplication</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="comment">// of code with the only difference being whether the const cast is present</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="comment">// 'this' is always const in this particular function and we sort out the</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="comment">// difference in FindLowerBound and FindLowerBoundConst.</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> Begin =</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *<span class="keyword">></span>(<span class="keyword">this</span>)->Elements.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>();</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> End =</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keyword">const_cast<</span><a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *<span class="keyword">></span>(<span class="keyword">this</span>)->Elements.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>();</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  CurrElementIter = Begin;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">return</span> CurrElementIter;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="comment">// Make sure our current iterator is valid.</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">if</span> (CurrElementIter == End)</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  --CurrElementIter;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="comment">// Search from our current iterator, either backwards or forwards,</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="comment">// depending on what element we are looking for.</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> ElementIter = CurrElementIter;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordflow">if</span> (CurrElementIter->index() == ElementIndex)</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">return</span> ElementIter;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (CurrElementIter->index() > ElementIndex)</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">while</span> (ElementIter != Begin</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  && ElementIter->index() > ElementIndex)</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  --ElementIter;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">while</span> (ElementIter != End &&</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  ElementIter->index() < ElementIndex)</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  ++ElementIter;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  CurrElementIter = ElementIter;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">return</span> ElementIter;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  }</div><div class="line"><a name="l00517"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ab4787f96a5f7cab926f9c7426aa92fc1"> 517</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> <a class="code" href="classSVF_1_1SparseBitVector.html#ab4787f96a5f7cab926f9c7426aa92fc1">FindLowerBoundConst</a>(<span class="keywordtype">unsigned</span> ElementIndex)<span class="keyword"> const</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keywordflow">return</span> FindLowerBoundImpl(ElementIndex);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  }</div><div class="line"><a name="l00521"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#aaac61c8dd5477ecc6e76c664bf45c0b0"> 521</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> <a class="code" href="classSVF_1_1SparseBitVector.html#aaac61c8dd5477ecc6e76c664bf45c0b0">FindLowerBound</a>(<span class="keywordtype">unsigned</span> ElementIndex)</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">return</span> FindLowerBoundImpl(ElementIndex);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// Iterator to walk set bits in the bitmap. This iterator is a lot uglier</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="comment">// than it would be, in order to be efficient.</span></div><div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html"> 528</a></span>  <span class="keyword">class </span><a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab"> 531</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab">AtEnd</a>;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div><div class="line"><a name="l00533"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aba51f4b0022c38b89f9fa519cf25fb3f"> 533</a></span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *<a class="code" href="classSVF_1_1BitVector.html">BitVector</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="comment">// Current element inside of bitmap.</span></div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a3627077086baa18bd0ae25efd981c18f"> 536</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a3627077086baa18bd0ae25efd981c18f">Iter</a>;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="comment">// Current bit number inside of our bitmap.</span></div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aae6ff6aada3863feb736619d4f8dba16"> 539</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aae6ff6aada3863feb736619d4f8dba16">BitNumber</a>;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="comment">// Current word number inside of our element.</span></div><div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6b139db78c9cba017df0fa468bee713a"> 542</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6b139db78c9cba017df0fa468bee713a">WordNumber</a>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="comment">// Current bits from the element.</span></div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#abc3768e05459a1d0a2d2220858a7a53d"> 545</a></span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">SparseBitVectorElement<ElementSize>::BitWord</a> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#abc3768e05459a1d0a2d2220858a7a53d">Bits</a>;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="comment">// Move our iterator to the first non-zero bit in the bitmap.</span></div><div class="line"><a name="l00548"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5e213fe330a23d22c8cf2b0624f73de7"> 548</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5e213fe330a23d22c8cf2b0624f73de7">AdvanceToFirstNonZero</a>()</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">if</span> (AtEnd)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordflow">if</span> (BitVector-><a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  AtEnd = <span class="keyword">true</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  Iter = BitVector-><a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  BitNumber = Iter->index() * ElementSize;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordtype">unsigned</span> BitPos = Iter->find_first();</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  BitNumber += BitPos;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  WordNumber = (BitNumber % ElementSize) / BITWORD_SIZE;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  Bits = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">word</a>(WordNumber);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  Bits >>= BitPos % BITWORD_SIZE;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="comment">// Move our iterator to the next non-zero bit.</span></div><div class="line"><a name="l00567"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a346d500f11666f4746237f42a8d67fc1"> 567</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a346d500f11666f4746237f42a8d67fc1">AdvanceToNextNonZero</a>()</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  {</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordflow">if</span> (AtEnd)</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">while</span> (Bits && !(Bits & 1))</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  {</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  Bits >>= 1;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  BitNumber += 1;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="comment">// See if we ran out of Bits in this word.</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">if</span> (!Bits)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="keywordtype">int</span> NextSetBitNumber = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#a60a023744119cd0424511ea1e83b76e1">find_next</a>(BitNumber % ElementSize) ;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="comment">// If we ran out of set bits in this element, move to next element.</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keywordflow">if</span> (NextSetBitNumber == -1 || (BitNumber % ElementSize == 0))</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  ++Iter;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  WordNumber = 0;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span> </div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="comment">// We may run out of elements in the bitmap.</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">if</span> (Iter == BitVector-><a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  AtEnd = <span class="keyword">true</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="comment">// Set up for next non-zero word in bitmap.</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  BitNumber = Iter->index() * ElementSize;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  NextSetBitNumber = Iter->find_first();</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  BitNumber += NextSetBitNumber;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  WordNumber = (BitNumber % ElementSize) / BITWORD_SIZE;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  Bits = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">word</a>(WordNumber);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  Bits >>= NextSetBitNumber % BITWORD_SIZE;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  }</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  WordNumber = (NextSetBitNumber % ElementSize) / BITWORD_SIZE;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  Bits = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">word</a>(WordNumber);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  Bits >>= NextSetBitNumber % BITWORD_SIZE;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  BitNumber = Iter-><a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">index</a>() * ElementSize;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  BitNumber += NextSetBitNumber;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  }</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  }</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a>() = <span class="keyword">delete</span>;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5fe4841ca223f13c2aeec4c6e69a7b43"> 616</a></span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5fe4841ca223f13c2aeec4c6e69a7b43">SparseBitVectorIterator</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS,</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordtype">bool</span> end = <span class="keyword">false</span>):BitVector(RHS)</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  Iter = BitVector-><a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  BitNumber = 0;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  Bits = 0;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  WordNumber = ~0;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  AtEnd = end;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  AdvanceToFirstNonZero();</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="comment">// Preincrement.</span></div><div class="line"><a name="l00628"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6638115d9d80e0f7b0cff50e06ccd891"> 628</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a>& <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6638115d9d80e0f7b0cff50e06ccd891">operator++</a>()</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  ++BitNumber;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  Bits >>= 1;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  AdvanceToNextNonZero();</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="comment">// Postincrement.</span></div><div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a9615a441805796b993252866e5a971aa"> 637</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a9615a441805796b993252866e5a971aa">operator++</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a> tmp = *<span class="keyword">this</span>;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  ++*<span class="keyword">this</span>;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  }</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="comment">// Return the current set bit number.</span></div><div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#ab1f0f55fdfef6b2d64d0a715483f5da4"> 645</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#ab1f0f55fdfef6b2d64d0a715483f5da4">operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordflow">return</span> BitNumber;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div><div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a7fc92990c6a09c33c3676ab47807bc68"> 650</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a7fc92990c6a09c33c3676ab47807bc68">operator==</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="comment">// If they are both at the end, ignore the rest of the fields.</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keywordflow">if</span> (AtEnd && RHS.<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab">AtEnd</a>)</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="comment">// Otherwise they are the same if they have the same bit number and</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="comment">// bitmap.</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keywordflow">return</span> AtEnd == RHS.<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab">AtEnd</a> && RHS.<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aae6ff6aada3863feb736619d4f8dba16">BitNumber</a> == BitNumber;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5448a6bdf09ef6a45d7c8e84648221ea"> 660</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5448a6bdf09ef6a45d7c8e84648221ea">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == RHS);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  };</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c"> 667</a></span>  <span class="keyword">using</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a> = <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVectorIterator</a>;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div><div class="line"><a name="l00669"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a4f618377a31eba119de672b0be4936bc"> 669</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a4f618377a31eba119de672b0be4936bc">SparseBitVector</a>() : Elements(), CurrElementIter(Elements.begin()) {}</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a9cb4261779da0cbeb8d09b8fbd5cf557"> 671</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a9cb4261779da0cbeb8d09b8fbd5cf557">SparseBitVector</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  : Elements(RHS.Elements), CurrElementIter(Elements.begin()) {}</div><div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a8bb2c6e68fadfae0428bc6ce5d63ad88"> 673</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a8bb2c6e68fadfae0428bc6ce5d63ad88">SparseBitVector</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &&RHS)</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  noexcept : Elements(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(RHS.Elements)), CurrElementIter(Elements.begin()) {}</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="comment">// Clear.</span></div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a5afe3e74412a1f3f728d7e0eaae70c13"> 677</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a5afe3e74412a1f3f728d7e0eaae70c13">clear</a>()</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  Elements.clear();</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="comment">// Assignment</span></div><div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#adeed46c25650bdbccdef0519906d1030"> 683</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a>& <a class="code" href="classSVF_1_1SparseBitVector.html#adeed46c25650bdbccdef0519906d1030">operator=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a>& RHS)</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS)</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span> </div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  Elements = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  }</div><div class="line"><a name="l00692"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a74ded252b99e70cb999b869a5250948e"> 692</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &<a class="code" href="classSVF_1_1SparseBitVector.html#a74ded252b99e70cb999b869a5250948e">operator=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &&RHS)</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  Elements = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">std::move</a>(RHS.Elements);</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="comment">// Test, Reset, and Set a bit in the bitmap.</span></div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80"> 700</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(<span class="keywordtype">unsigned</span> Idx)<span class="keyword"> const</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordtype">unsigned</span> ElementIndex = Idx / ElementSize;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> ElementIter = FindLowerBoundConst(ElementIndex);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="comment">// If we can't find an element that is supposed to contain this bit, there</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="comment">// is nothing more to do.</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keywordflow">if</span> (ElementIter == Elements.end() ||</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  ElementIter->index() != ElementIndex)</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keywordflow">return</span> ElementIter->test(Idx % ElementSize);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  }</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span> </div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ad5337b5aeed50f8b7ffd56b14ee25c9f"> 716</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector.html#ad5337b5aeed50f8b7ffd56b14ee25c9f">reset</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordtype">unsigned</span> ElementIndex = Idx / ElementSize;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> ElementIter = FindLowerBound(ElementIndex);</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="comment">// If we can't find an element that is supposed to contain this bit, there</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="comment">// is nothing more to do.</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">if</span> (ElementIter == Elements.end() ||</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  ElementIter->index() != ElementIndex)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  ElementIter->reset(Idx % ElementSize);</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span> </div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="comment">// When the element is zeroed out, delete it.</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">if</span> (ElementIter->empty())</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  {</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  ++CurrElementIter;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  Elements.erase(ElementIter);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  }</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00739"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832"> 739</a></span>  <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordtype">unsigned</span> ElementIndex = Idx / ElementSize;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> ElementIter;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  ElementIter = Elements.emplace(Elements.end(), ElementIndex);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  ElementIter = FindLowerBound(ElementIndex);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span> </div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">if</span> (ElementIter == Elements.end() ||</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  ElementIter->index() != ElementIndex)</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  {</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="comment">// We may have hit the beginning of our SparseBitVector, in which case,</span></div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="comment">// we may need to insert right after this element, which requires moving</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="comment">// the current iterator forward one, because insert does insert before.</span></div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">if</span> (ElementIter != Elements.end() &&</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  ElementIter->index() < ElementIndex)</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  ++ElementIter;</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  ElementIter = Elements.emplace(ElementIter, ElementIndex);</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  }</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  CurrElementIter = ElementIter;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  ElementIter->set(Idx % ElementSize);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  }</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span> </div><div class="line"><a name="l00768"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a355247d17d1c17b857b4ee572e19b91f"> 768</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a355247d17d1c17b857b4ee572e19b91f">test_and_set</a>(<span class="keywordtype">unsigned</span> Idx)</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordtype">bool</span> old = test(Idx);</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">if</span> (!old)</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  {</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keyword">set</span>(Idx);</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  }</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00779"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#abfb058304c4b174d162a94c0cc26d2f7"> 779</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#abfb058304c4b174d162a94c0cc26d2f7">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == RHS);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  }</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div><div class="line"><a name="l00784"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a816d96bad46fde34b3848bf08dc6cdf5"> 784</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a816d96bad46fde34b3848bf08dc6cdf5">operator==</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span> </div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">for</span> (; Iter1 != Elements.end() && Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end();</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  ++Iter1, ++Iter2)</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  {</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">if</span> (*Iter1 != *Iter2)</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">return</span> Iter1 == Elements.end() && Iter2 == RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end();</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  }</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span> </div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="comment">// Union our bitmap with the RHS and return true if we changed.</span></div><div class="line"><a name="l00799"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a48668ff6f168162bd8f13cf860749090"> 799</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a48668ff6f168162bd8f13cf860749090">operator|=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  {</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS)</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span> </div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="comment">// If RHS is empty, we are done</span></div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">if</span> (RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">while</span> (Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  {</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keywordflow">if</span> (Iter1 == Elements.end() || Iter1->index() > Iter2->index())</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  {</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  Elements.insert(Iter1, *Iter2);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  ++Iter2;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  }</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  changed |= Iter1->unionWith(*Iter2);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  ++Iter1;</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  ++Iter2;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  }</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  {</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  ++Iter1;</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  }</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span> </div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="comment">// Intersect our bitmap with the RHS and return true if ours changed.</span></div><div class="line"><a name="l00836"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a1f7e6424f8bfc68589a9947b26e0b62f"> 836</a></span>  <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4">operator&=</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  {</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS)</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span> </div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="comment">// Check if both bitmaps are empty.</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">if</span> (Elements.empty() && RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span> </div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="comment">// Loop through, intersecting as we go, erasing elements when necessary.</span></div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="keywordflow">while</span> (Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  {</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">if</span> (Iter1 == Elements.end())</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  }</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span> </div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="keywordflow">if</span> (Iter1->index() > Iter2->index())</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  {</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  ++Iter2;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  }</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  {</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordtype">bool</span> BecameZero;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  changed |= Iter1->intersectWith(*Iter2, BecameZero);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keywordflow">if</span> (BecameZero)</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  {</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> IterTmp = Iter1;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  ++Iter1;</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  Elements.erase(IterTmp);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  }</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  {</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  ++Iter1;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  ++Iter2;</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  }</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  {</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> IterTmp = Iter1;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  ++Iter1;</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  Elements.erase(IterTmp);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  }</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keywordflow">if</span> (Iter1 != Elements.end())</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  Elements.erase(Iter1, Elements.end());</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  }</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> </div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="comment">// Intersect our bitmap with the complement of the RHS and return true</span></div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <span class="comment">// if ours changed.</span></div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef"> 897</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> &RHS)</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  {</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS)</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  {</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="keywordflow">if</span> (!empty())</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  {</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  clear();</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  }</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  }</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span> </div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span> </div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <span class="comment">// If either our bitmap or RHS is empty, we are done</span></div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="keywordflow">if</span> (Elements.empty() || RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> </div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// Loop through, intersecting as we go, erasing elements when necessary.</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="keywordflow">while</span> (Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keywordflow">if</span> (Iter1 == Elements.end())</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  {</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  }</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> </div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="keywordflow">if</span> (Iter1->index() > Iter2->index())</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  {</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  ++Iter2;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  }</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  {</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordtype">bool</span> BecameZero;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  changed |= Iter1->intersectWithComplement(*Iter2, BecameZero);</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">if</span> (BecameZero)</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  {</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">ElementListIter</a> IterTmp = Iter1;</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  ++Iter1;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  Elements.erase(IterTmp);</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  {</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  ++Iter1;</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  }</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  ++Iter2;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  {</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  ++Iter1;</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  }</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  }</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  }</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span> </div><div class="line"><a name="l00955"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#aaab743995d5dd1359b0f541dacc1dcf3"> 955</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#aaab743995d5dd1359b0f541dacc1dcf3">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS)<span class="keyword"> const</span></div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <span class="keywordflow">return</span> intersectWithComplement(*RHS);</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  }</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span> </div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="comment">// Three argument version of intersectWithComplement.</span></div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <span class="comment">// Result of RHS1 & ~RHS2 is stored into this bitmap.</span></div><div class="line"><a name="l00962"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#afee44821475fa31f218fb743b264cb37"> 962</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector.html#afee44821475fa31f218fb743b264cb37">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS1,</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS2)</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  {</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS1)</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  {</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  intersectWithComplement(RHS2);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  }</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">this</span> == &RHS2)</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  {</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector</a> RHS2Copy(RHS2);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  intersectWithComplement(RHS1, RHS2Copy);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  }</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span> </div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  Elements.clear();</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  CurrElementIter = Elements.begin();</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter1 = RHS1.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS2.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span> </div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <span class="comment">// If RHS1 is empty, we are done</span></div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <span class="comment">// If RHS2 is empty, we still have to copy RHS1</span></div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <span class="keywordflow">if</span> (RHS1.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span> </div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="comment">// Loop through, intersecting as we go, erasing elements when necessary.</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keywordflow">while</span> (Iter2 != RHS2.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  {</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="keywordflow">if</span> (Iter1 == RHS1.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span> </div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keywordflow">if</span> (Iter1->index() > Iter2->index())</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  ++Iter2;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keywordtype">bool</span> BecameZero = <span class="keyword">false</span>;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  Elements.emplace_back(Iter1->index());</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  Elements.back().intersectWithComplement(*Iter1, *Iter2, BecameZero);</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">if</span> (BecameZero)</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  Elements.pop_back();</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  ++Iter1;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  ++Iter2;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  }</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  {</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  Elements.push_back(*Iter1++);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  }</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <span class="comment">// copy the remaining elements</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">std::copy</a>(Iter1, RHS1.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end(), std::back_inserter(Elements));</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  }</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div><div class="line"><a name="l01017"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a28d0e5b43ad556d079b5b0ec58e898e4"> 1017</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a28d0e5b43ad556d079b5b0ec58e898e4">intersectWithComplement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS1,</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS2)</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  {</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  intersectWithComplement(*RHS1, *RHS2);</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  }</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div><div class="line"><a name="l01023"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79"> 1023</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">intersects</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS)<span class="keyword"> const</span></div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keywordflow">return</span> intersects(*RHS);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  }</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> </div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="comment">// Return true if we share any bits in common with RHS</span></div><div class="line"><a name="l01029"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a704fddd1bf7592e9df9fbc14c3873696"> 1029</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a704fddd1bf7592e9df9fbc14c3873696">intersects</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter1 = Elements.begin();</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter2 = RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.begin();</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> </div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <span class="comment">// Check if both bitmaps are empty.</span></div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <span class="keywordflow">if</span> (Elements.empty() && RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.empty())</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="comment">// Loop through, intersecting stopping when we hit bits in common.</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="keywordflow">while</span> (Iter2 != RHS.<a class="code" href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">Elements</a>.end())</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  {</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordflow">if</span> (Iter1 == Elements.end())</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> </div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="keywordflow">if</span> (Iter1->index() > Iter2->index())</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  {</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  ++Iter2;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Iter1->index() == Iter2->index())</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  {</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="keywordflow">if</span> (Iter1->intersects(*Iter2))</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  ++Iter1;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  ++Iter2;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  ++Iter1;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  }</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  }</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  }</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="comment">// Return true iff all bits set in this SparseBitVector are</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="comment">// also set in RHS.</span></div><div class="line"><a name="l01065"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8"> 1065</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">contains</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)<span class="keyword"> const</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> Result(*<span class="keyword">this</span>);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  Result &= RHS;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <span class="keywordflow">return</span> (Result == RHS);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  }</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="comment">// Return the first set bit in the bitmap. Return -1 if no bits are set.</span></div><div class="line"><a name="l01073"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a06eeb5543eb160e08f9a41e30b52d963"> 1073</a></span>  <span class="keywordtype">int</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a06eeb5543eb160e08f9a41e30b52d963">find_first</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement<ElementSize></a> &First = *(Elements.begin());</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keywordflow">return</span> (First.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">index</a>() * ElementSize) + First.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a2281ff5a0a492064cff864d4c246cbc2">find_first</a>();</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  }</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <span class="comment">// Return the last set bit in the bitmap. Return -1 if no bits are set.</span></div><div class="line"><a name="l01082"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#ac969500db9dbd1c63b6a47a1d9a5abba"> 1082</a></span>  <span class="keywordtype">int</span> <a class="code" href="classSVF_1_1SparseBitVector.html#ac969500db9dbd1c63b6a47a1d9a5abba">find_last</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <span class="keywordflow">if</span> (Elements.empty())</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="keyword">const</span> <a class="code" href="structSVF_1_1SparseBitVectorElement.html">SparseBitVectorElement<ElementSize></a> &Last = *(Elements.rbegin());</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  <span class="keywordflow">return</span> (Last.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">index</a>() * ElementSize) + Last.<a class="code" href="structSVF_1_1SparseBitVectorElement.html#a1d79c099887fcf01f5c0743b38caf39d">find_last</a>();</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  }</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="comment">// Return true if the SparseBitVector is empty</span></div><div class="line"><a name="l01091"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#aea5389ad7e5fe4c8bef686940a1a6056"> 1091</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SparseBitVector.html#aea5389ad7e5fe4c8bef686940a1a6056">empty</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="keywordflow">return</span> Elements.empty();</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div><div class="line"><a name="l01096"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a9f96e6a886fa69e07cda5dbfaed8b7c9"> 1096</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classSVF_1_1SparseBitVector.html#a9f96e6a886fa69e07cda5dbfaed8b7c9">count</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="keywordtype">unsigned</span> BitCount = 0;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">ElementListConstIter</a> Iter = Elements.begin();</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  Iter != Elements.end();</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  ++Iter)</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  BitCount += Iter->count();</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> </div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">return</span> BitCount;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  }</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> </div><div class="line"><a name="l01107"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772"> 1107</a></span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a> <a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  }</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div><div class="line"><a name="l01112"></a><span class="lineno"><a class="line" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1"> 1112</a></span>  <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a> <a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">iterator</a>(<span class="keyword">this</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> };</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="comment">// Convenience functions to allow Or and And without dereferencing in the user</span></div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="comment">// code.</span></div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01122"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a97ff28f5dfd5c31e6ef351de3cdad85d"> 1122</a></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a97ff28f5dfd5c31e6ef351de3cdad85d">operator |=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS)</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> {</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keywordflow">return</span> LHS |= *RHS;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> }</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01129"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a7554dead3b2d1bcdfcb36c213e6735b6"> 1129</a></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a97ff28f5dfd5c31e6ef351de3cdad85d">operator |=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *LHS,</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> {</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="keywordflow">return</span> LHS->operator|=(RHS);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> }</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> </div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01136"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4"> 1136</a></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4">operator &=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *LHS,</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> {</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keywordflow">return</span> LHS->operator&=(RHS);</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01143"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a5df68020aca621b053acbe3f917f0809"> 1143</a></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4">operator &=</a>(<a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> *RHS)</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> {</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  <span class="keywordflow">return</span> LHS &= *RHS;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> }</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">// Convenience functions for infix union, intersection, difference operators.</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a></div><div class="line"><a name="l01153"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ad16a5803e8f1fa06266223aeb8366df1"> 1153</a></span> <a class="code" href="namespaceSVF.html#abed4354cf0282ae30b8330c0e91008d8">operator|</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> {</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> Result(LHS);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  Result |= RHS;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordflow">return</span> Result;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> }</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a></div><div class="line"><a name="l01163"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a47b11c4e305a8a1e2dc387c2f9d4617e"> 1163</a></span> <a class="code" href="namespaceSVF.html#aeb5348e052254496cad4e036073c3941">operator&</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> {</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> Result(LHS);</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  Result &= RHS;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <span class="keywordflow">return</span> Result;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> </div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a></div><div class="line"><a name="l01173"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a1b6662f895cfd942996ac4d578960eed"> 1173</a></span> <a class="code" href="namespaceSVF.html#a4bddb7dbd28d3c0deb3cd35e48179a36">operator-</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS,</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &RHS)</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> Result;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  Result.<a class="code" href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">intersectWithComplement</a>(LHS, RHS);</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <span class="keywordflow">return</span> Result;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> }</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> </div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="comment">// Dump a SparseBitVector to a stream</span></div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> ElementSize></div><div class="line"><a name="l01183"></a><span class="lineno"><a class="line" href="namespaceSVF.html#aae350f79ebcb9efd22ec9efa6678cd13"> 1183</a></span> <span class="keywordtype">void</span> <a class="code" href="namespaceSVF.html#aae350f79ebcb9efd22ec9efa6678cd13">dump</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">SparseBitVector<ElementSize></a> &LHS, std::ostream &out)</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> {</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  out << <span class="stringliteral">"["</span>;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> </div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  <span class="keyword">typename</span> <a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SparseBitVector<ElementSize>::iterator</a> bi = LHS.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(),</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  be = LHS.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>();</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  <span class="keywordflow">if</span> (bi != be)</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  {</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  out << *bi;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <span class="keywordflow">for</span> (++bi; bi != be; ++bi)</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  {</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  out << <span class="stringliteral">" "</span> << *bi;</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  }</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  }</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  out << <span class="stringliteral">"]\n"</span>;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> }</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> </div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="preprocessor">#endif // SPARSEBITVECTOR_H</span></div><div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SVF::SparseBitVector::SparseBitVectorIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00528">SparseBitVector.h:528</a></div></div>
|
|
70
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ac969500db9dbd1c63b6a47a1d9a5abba"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ac969500db9dbd1c63b6a47a1d9a5abba">SVF::SparseBitVector::find_last</a></div><div class="ttdeci">int find_last() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01082">SparseBitVector.h:1082</a></div></div>
|
|
71
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a2281ff5a0a492064cff864d4c246cbc2"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a2281ff5a0a492064cff864d4c246cbc2">SVF::SparseBitVectorElement::find_first</a></div><div class="ttdeci">int find_first() const</div><div class="ttdoc">find_first - Returns the index of the first set bit. </div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00310">SparseBitVector.h:310</a></div></div>
|
|
72
72
|
<div class="ttc" id="structSVF_1_1TrailingZerosCounter_html_aa8b0814bfce87a935ef57f870fe1ee83"><div class="ttname"><a href="structSVF_1_1TrailingZerosCounter.html#aa8b0814bfce87a935ef57f870fe1ee83">SVF::TrailingZerosCounter::count</a></div><div class="ttdeci">static unsigned count(T Val, ZeroBehavior)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00044">SparseBitVector.h:44</a></div></div>
|
|
73
73
|
<div class="ttc" id="namespaceSVF_html_af5b6ec9770091c42227a45491b00b349"><div class="ttname"><a href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349">SVF::ZeroBehavior</a></div><div class="ttdeci">ZeroBehavior</div><div class="ttdoc">The behavior an operation has on an input of 0. </div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00032">SparseBitVector.h:32</a></div></div>
|
|
74
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a8ed9ca88c7eef7574a9887197b422e81"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a8ed9ca88c7eef7574a9887197b422e81">SVF::SparseBitVectorElement::count</a></div><div class="ttdeci">size_type count() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
75
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_abfb058304c4b174d162a94c0cc26d2f7"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#abfb058304c4b174d162a94c0cc26d2f7">SVF::SparseBitVector::operator!=</a></div><div class="ttdeci">bool operator!=(const SparseBitVector &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
76
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a704fddd1bf7592e9df9fbc14c3873696"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a704fddd1bf7592e9df9fbc14c3873696">SVF::SparseBitVector::intersects</a></div><div class="ttdeci">bool intersects(const SparseBitVector< ElementSize > &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
77
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a6b139db78c9cba017df0fa468bee713a"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6b139db78c9cba017df0fa468bee713a">SVF::SparseBitVector::SparseBitVectorIterator::WordNumber</a></div><div class="ttdeci">unsigned WordNumber</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
78
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a7a5d223870e32035863f6596727c6775"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a7a5d223870e32035863f6596727c6775">SVF::SparseBitVectorElement::test_and_set</a></div><div class="ttdeci">bool test_and_set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
79
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a6d81176f07f369b38da34e624710b387"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a6d81176f07f369b38da34e624710b387">SVF::SparseBitVectorElement::intersectWithComplement</a></div><div class="ttdeci">void intersectWithComplement(const SparseBitVectorElement &RHS1, const SparseBitVectorElement &RHS2, bool &BecameZero)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
80
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_ab1f0f55fdfef6b2d64d0a715483f5da4"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#ab1f0f55fdfef6b2d64d0a715483f5da4">SVF::SparseBitVector::SparseBitVectorIterator::operator*</a></div><div class="ttdeci">unsigned operator*() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
81
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a9615a441805796b993252866e5a971aa"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a9615a441805796b993252866e5a971aa">SVF::SparseBitVector::SparseBitVectorIterator::operator++</a></div><div class="ttdeci">SparseBitVectorIterator operator++(int)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
82
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_abc3768e05459a1d0a2d2220858a7a53d"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#abc3768e05459a1d0a2d2220858a7a53d">SVF::SparseBitVector::SparseBitVectorIterator::Bits</a></div><div class="ttdeci">SparseBitVectorElement< ElementSize >::BitWord Bits</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
83
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a355247d17d1c17b857b4ee572e19b91f"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a355247d17d1c17b857b4ee572e19b91f">SVF::SparseBitVector::test_and_set</a></div><div class="ttdeci">bool test_and_set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
74
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a8ed9ca88c7eef7574a9887197b422e81"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a8ed9ca88c7eef7574a9887197b422e81">SVF::SparseBitVectorElement::count</a></div><div class="ttdeci">size_type count() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00301">SparseBitVector.h:301</a></div></div>
|
|
75
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_abfb058304c4b174d162a94c0cc26d2f7"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#abfb058304c4b174d162a94c0cc26d2f7">SVF::SparseBitVector::operator!=</a></div><div class="ttdeci">bool operator!=(const SparseBitVector &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00779">SparseBitVector.h:779</a></div></div>
|
|
76
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a704fddd1bf7592e9df9fbc14c3873696"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a704fddd1bf7592e9df9fbc14c3873696">SVF::SparseBitVector::intersects</a></div><div class="ttdeci">bool intersects(const SparseBitVector< ElementSize > &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01029">SparseBitVector.h:1029</a></div></div>
|
|
77
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a6b139db78c9cba017df0fa468bee713a"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6b139db78c9cba017df0fa468bee713a">SVF::SparseBitVector::SparseBitVectorIterator::WordNumber</a></div><div class="ttdeci">unsigned WordNumber</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00542">SparseBitVector.h:542</a></div></div>
|
|
78
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a7a5d223870e32035863f6596727c6775"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a7a5d223870e32035863f6596727c6775">SVF::SparseBitVectorElement::test_and_set</a></div><div class="ttdeci">bool test_and_set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00280">SparseBitVector.h:280</a></div></div>
|
|
79
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a6d81176f07f369b38da34e624710b387"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a6d81176f07f369b38da34e624710b387">SVF::SparseBitVectorElement::intersectWithComplement</a></div><div class="ttdeci">void intersectWithComplement(const SparseBitVectorElement &RHS1, const SparseBitVectorElement &RHS2, bool &BecameZero)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00436">SparseBitVector.h:436</a></div></div>
|
|
80
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_ab1f0f55fdfef6b2d64d0a715483f5da4"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#ab1f0f55fdfef6b2d64d0a715483f5da4">SVF::SparseBitVector::SparseBitVectorIterator::operator*</a></div><div class="ttdeci">unsigned operator*() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00645">SparseBitVector.h:645</a></div></div>
|
|
81
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a9615a441805796b993252866e5a971aa"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a9615a441805796b993252866e5a971aa">SVF::SparseBitVector::SparseBitVectorIterator::operator++</a></div><div class="ttdeci">SparseBitVectorIterator operator++(int)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00637">SparseBitVector.h:637</a></div></div>
|
|
82
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_abc3768e05459a1d0a2d2220858a7a53d"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#abc3768e05459a1d0a2d2220858a7a53d">SVF::SparseBitVector::SparseBitVectorIterator::Bits</a></div><div class="ttdeci">SparseBitVectorElement< ElementSize >::BitWord Bits</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00545">SparseBitVector.h:545</a></div></div>
|
|
83
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a355247d17d1c17b857b4ee572e19b91f"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a355247d17d1c17b857b4ee572e19b91f">SVF::SparseBitVector::test_and_set</a></div><div class="ttdeci">bool test_and_set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00768">SparseBitVector.h:768</a></div></div>
|
|
84
84
|
<div class="ttc" id="namespaceSVF_html_ae86e9ecca38512426d0bade3a95d0a51"><div class="ttname"><a href="namespaceSVF.html#ae86e9ecca38512426d0bade3a95d0a51">SVF::countPopulation</a></div><div class="ttdeci">unsigned countPopulation(T Value)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00197">SparseBitVector.h:197</a></div></div>
|
|
85
85
|
<div class="ttc" id="namespaceSVF_html_af5b6ec9770091c42227a45491b00b349aac378e728f7d53b2d96be1d33c63afb1"><div class="ttname"><a href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349aac378e728f7d53b2d96be1d33c63afb1">SVF::ZB_Max</a></div><div class="ttdoc">The returned value is numeric_limits<T>::max() </div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00037">SparseBitVector.h:37</a></div></div>
|
|
86
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a28d0e5b43ad556d079b5b0ec58e898e4"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a28d0e5b43ad556d079b5b0ec58e898e4">SVF::SparseBitVector::intersectWithComplement</a></div><div class="ttdeci">void intersectWithComplement(const SparseBitVector< ElementSize > *RHS1, const SparseBitVector< ElementSize > *RHS2)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
87
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ada7cb2e144c2fccd0d50138778b152dd"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ada7cb2e144c2fccd0d50138778b152dd">SVF::SparseBitVector::CurrElementIter</a></div><div class="ttdeci">ElementListIter CurrElementIter</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
88
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a5448a6bdf09ef6a45d7c8e84648221ea"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5448a6bdf09ef6a45d7c8e84648221ea">SVF::SparseBitVector::SparseBitVectorIterator::operator!=</a></div><div class="ttdeci">bool operator!=(const SparseBitVectorIterator &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
86
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a28d0e5b43ad556d079b5b0ec58e898e4"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a28d0e5b43ad556d079b5b0ec58e898e4">SVF::SparseBitVector::intersectWithComplement</a></div><div class="ttdeci">void intersectWithComplement(const SparseBitVector< ElementSize > *RHS1, const SparseBitVector< ElementSize > *RHS2)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01017">SparseBitVector.h:1017</a></div></div>
|
|
87
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ada7cb2e144c2fccd0d50138778b152dd"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ada7cb2e144c2fccd0d50138778b152dd">SVF::SparseBitVector::CurrElementIter</a></div><div class="ttdeci">ElementListIter CurrElementIter</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00468">SparseBitVector.h:468</a></div></div>
|
|
88
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a5448a6bdf09ef6a45d7c8e84648221ea"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5448a6bdf09ef6a45d7c8e84648221ea">SVF::SparseBitVector::SparseBitVectorIterator::operator!=</a></div><div class="ttdeci">bool operator!=(const SparseBitVectorIterator &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00660">SparseBitVector.h:660</a></div></div>
|
|
89
89
|
<div class="ttc" id="namespaceSVF_html_a4bddb7dbd28d3c0deb3cd35e48179a36"><div class="ttname"><a href="namespaceSVF.html#a4bddb7dbd28d3c0deb3cd35e48179a36">SVF::operator-</a></div><div class="ttdeci">IntervalValue operator-(const IntervalValue &lhs, const IntervalValue &rhs)</div><div class="ttdoc">Substract IntervalValues. </div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00458">IntervalValue.h:458</a></div></div>
|
|
90
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a48668ff6f168162bd8f13cf860749090"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a48668ff6f168162bd8f13cf860749090">SVF::SparseBitVector::operator|=</a></div><div class="ttdeci">bool operator|=(const SparseBitVector &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
90
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a48668ff6f168162bd8f13cf860749090"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a48668ff6f168162bd8f13cf860749090">SVF::SparseBitVector::operator|=</a></div><div class="ttdeci">bool operator|=(const SparseBitVector &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00799">SparseBitVector.h:799</a></div></div>
|
|
91
91
|
<div class="ttc" id="structSVF_1_1LeadingZerosCounter_html"><div class="ttname"><a href="structSVF_1_1LeadingZerosCounter.html">SVF::LeadingZerosCounter</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00102">SparseBitVector.h:102</a></div></div>
|
|
92
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a112f2ede1240c95f9fe810f2882fab80"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">SVF::SparseBitVector::test</a></div><div class="ttdeci">bool test(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
93
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ad5337b5aeed50f8b7ffd56b14ee25c9f"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ad5337b5aeed50f8b7ffd56b14ee25c9f">SVF::SparseBitVector::reset</a></div><div class="ttdeci">void reset(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
92
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a112f2ede1240c95f9fe810f2882fab80"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">SVF::SparseBitVector::test</a></div><div class="ttdeci">bool test(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00700">SparseBitVector.h:700</a></div></div>
|
|
93
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ad5337b5aeed50f8b7ffd56b14ee25c9f"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ad5337b5aeed50f8b7ffd56b14ee25c9f">SVF::SparseBitVector::reset</a></div><div class="ttdeci">void reset(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00716">SparseBitVector.h:716</a></div></div>
|
|
94
94
|
<div class="ttc" id="namespaceSVF_html_aeb5348e052254496cad4e036073c3941"><div class="ttname"><a href="namespaceSVF.html#aeb5348e052254496cad4e036073c3941">SVF::operator &</a></div><div class="ttdeci">IntervalValue operator &(const IntervalValue &lhs, const IntervalValue &rhs)</div><div class="ttdoc">Bitwise AND of IntervalValues. </div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00770">IntervalValue.h:770</a></div></div>
|
|
95
|
-
<div class="ttc" id="
|
|
96
|
-
<div class="ttc" id="
|
|
97
|
-
<div class="ttc" id="
|
|
98
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a06eeb5543eb160e08f9a41e30b52d963"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a06eeb5543eb160e08f9a41e30b52d963">SVF::SparseBitVector::find_first</a></div><div class="ttdeci">int find_first() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01081">SparseBitVector.h:1081</a></div></div>
|
|
95
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a8b481ef53a27a351affecab90310b1ef"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a8b481ef53a27a351affecab90310b1ef">SVF::SparseBitVector::intersectWithComplement</a></div><div class="ttdeci">bool intersectWithComplement(const SparseBitVector &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00897">SparseBitVector.h:897</a></div></div>
|
|
96
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a9f96e6a886fa69e07cda5dbfaed8b7c9"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a9f96e6a886fa69e07cda5dbfaed8b7c9">SVF::SparseBitVector::count</a></div><div class="ttdeci">unsigned count() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01096">SparseBitVector.h:1096</a></div></div>
|
|
97
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a06eeb5543eb160e08f9a41e30b52d963"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a06eeb5543eb160e08f9a41e30b52d963">SVF::SparseBitVector::find_first</a></div><div class="ttdeci">int find_first() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01073">SparseBitVector.h:1073</a></div></div>
|
|
99
98
|
<div class="ttc" id="namespaceSVF_html_abed4354cf0282ae30b8330c0e91008d8"><div class="ttname"><a href="namespaceSVF.html#abed4354cf0282ae30b8330c0e91008d8">SVF::operator|</a></div><div class="ttdeci">IntervalValue operator|(const IntervalValue &lhs, const IntervalValue &rhs)</div><div class="ttdoc">Bitwise OR of IntervalValues. </div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00797">IntervalValue.h:797</a></div></div>
|
|
100
|
-
<div class="ttc" id="namespaceSVF_html_a9d6c986a34096a3552a6385ccbb724e4"><div class="ttname"><a href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4">SVF::operator&=</a></div><div class="ttdeci">bool operator&=(SparseBitVector< ElementSize > *LHS, const SparseBitVector< ElementSize > &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
101
|
-
<div class="ttc" id="
|
|
102
|
-
<div class="ttc" id="
|
|
103
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_aae6ff6aada3863feb736619d4f8dba16"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aae6ff6aada3863feb736619d4f8dba16">SVF::SparseBitVector::SparseBitVectorIterator::BitNumber</a></div><div class="ttdeci">unsigned BitNumber</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00547">SparseBitVector.h:547</a></div></div>
|
|
99
|
+
<div class="ttc" id="namespaceSVF_html_a9d6c986a34096a3552a6385ccbb724e4"><div class="ttname"><a href="namespaceSVF.html#a9d6c986a34096a3552a6385ccbb724e4">SVF::operator&=</a></div><div class="ttdeci">bool operator&=(SparseBitVector< ElementSize > *LHS, const SparseBitVector< ElementSize > &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01136">SparseBitVector.h:1136</a></div></div>
|
|
100
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_ae63d6fcc488ad3cdcddf35edb4e9c827"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#ae63d6fcc488ad3cdcddf35edb4e9c827">SVF::SparseBitVectorElement::index</a></div><div class="ttdeci">unsigned index() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00262">SparseBitVector.h:262</a></div></div>
|
|
101
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_aae6ff6aada3863feb736619d4f8dba16"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aae6ff6aada3863feb736619d4f8dba16">SVF::SparseBitVector::SparseBitVectorIterator::BitNumber</a></div><div class="ttdeci">unsigned BitNumber</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00539">SparseBitVector.h:539</a></div></div>
|
|
104
102
|
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_af9014ab5077a2d9c1aed1e9b1460390d"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#af9014ab5077a2d9c1aed1e9b1460390d">SVF::SparseBitVectorElement::BitWord</a></div><div class="ttdeci">unsigned long BitWord</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00220">SparseBitVector.h:220</a></div></div>
|
|
105
103
|
<div class="ttc" id="namespaceSVF_html_a5cb5811bab8e04773dfa21ad919df461"><div class="ttname"><a href="namespaceSVF.html#a5cb5811bab8e04773dfa21ad919df461">SVF::countTrailingZeros</a></div><div class="ttdeci">unsigned countTrailingZeros(T Val, ZeroBehavior ZB=ZB_Width)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00077">SparseBitVector.h:77</a></div></div>
|
|
106
104
|
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_ad9e38352db094adcdfb2964f325d9e53"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#ad9e38352db094adcdfb2964f325d9e53">SVF::SparseBitVectorElement::size_type</a></div><div class="ttdeci">unsigned size_type</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00221">SparseBitVector.h:221</a></div></div>
|
|
107
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_abbd0e0cf759fad7858224ed8a63aade8"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">SVF::SparseBitVector::contains</a></div><div class="ttdeci">bool contains(const SparseBitVector< ElementSize > &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
105
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_abbd0e0cf759fad7858224ed8a63aade8"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#abbd0e0cf759fad7858224ed8a63aade8">SVF::SparseBitVector::contains</a></div><div class="ttdeci">bool contains(const SparseBitVector< ElementSize > &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01065">SparseBitVector.h:1065</a></div></div>
|
|
108
106
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a72502f7f536418621485e90ab98c2016"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a72502f7f536418621485e90ab98c2016">SVF::SVFUtil::move</a></div><div class="ttdeci">constexpr std::remove_reference< T >::type && move(T &&t) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00657">SVFUtil.h:657</a></div></div>
|
|
109
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a3627077086baa18bd0ae25efd981c18f"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a3627077086baa18bd0ae25efd981c18f">SVF::SparseBitVector::SparseBitVectorIterator::Iter</a></div><div class="ttdeci">ElementListConstIter Iter</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
110
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a6638115d9d80e0f7b0cff50e06ccd891"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6638115d9d80e0f7b0cff50e06ccd891">SVF::SparseBitVector::SparseBitVectorIterator::operator++</a></div><div class="ttdeci">SparseBitVectorIterator & operator++()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
111
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_aaac61c8dd5477ecc6e76c664bf45c0b0"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#aaac61c8dd5477ecc6e76c664bf45c0b0">SVF::SparseBitVector::FindLowerBound</a></div><div class="ttdeci">ElementListIter FindLowerBound(unsigned ElementIndex)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
112
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a2ac6b33e335ac411740c875c6aeb6706"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a2ac6b33e335ac411740c875c6aeb6706">SVF::SparseBitVectorElement::intersects</a></div><div class="ttdeci">bool intersects(const SparseBitVectorElement &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
107
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a3627077086baa18bd0ae25efd981c18f"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a3627077086baa18bd0ae25efd981c18f">SVF::SparseBitVector::SparseBitVectorIterator::Iter</a></div><div class="ttdeci">ElementListConstIter Iter</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00536">SparseBitVector.h:536</a></div></div>
|
|
108
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a6638115d9d80e0f7b0cff50e06ccd891"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a6638115d9d80e0f7b0cff50e06ccd891">SVF::SparseBitVector::SparseBitVectorIterator::operator++</a></div><div class="ttdeci">SparseBitVectorIterator & operator++()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00628">SparseBitVector.h:628</a></div></div>
|
|
109
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_aaac61c8dd5477ecc6e76c664bf45c0b0"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#aaac61c8dd5477ecc6e76c664bf45c0b0">SVF::SparseBitVector::FindLowerBound</a></div><div class="ttdeci">ElementListIter FindLowerBound(unsigned ElementIndex)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00521">SparseBitVector.h:521</a></div></div>
|
|
110
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a2ac6b33e335ac411740c875c6aeb6706"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a2ac6b33e335ac411740c875c6aeb6706">SVF::SparseBitVectorElement::intersects</a></div><div class="ttdeci">bool intersects(const SparseBitVectorElement &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00375">SparseBitVector.h:375</a></div></div>
|
|
113
111
|
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a4b6a06a3a19f2241cec68e09d4feb526"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a4b6a06a3a19f2241cec68e09d4feb526">SVF::SparseBitVectorElement::Bits</a></div><div class="ttdeci">BitWord Bits[BITWORDS_PER_ELEMENT]</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00232">SparseBitVector.h:232</a></div></div>
|
|
114
112
|
<div class="ttc" id="namespaceSVF_html_af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54"><div class="ttname"><a href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349a5cbe6f40e9b49a24bc2d2e4bf6f12d54">SVF::ZB_Undefined</a></div><div class="ttdoc">The returned value is undefined. </div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00035">SparseBitVector.h:35</a></div></div>
|
|
115
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a465b415217533f1f0026bec837495fdd"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a465b415217533f1f0026bec837495fdd">SVF::SparseBitVectorElement::test</a></div><div class="ttdeci">bool test(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
116
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a346d500f11666f4746237f42a8d67fc1"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a346d500f11666f4746237f42a8d67fc1">SVF::SparseBitVector::SparseBitVectorIterator::AdvanceToNextNonZero</a></div><div class="ttdeci">void AdvanceToNextNonZero()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
117
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a816d96bad46fde34b3848bf08dc6cdf5"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a816d96bad46fde34b3848bf08dc6cdf5">SVF::SparseBitVector::operator==</a></div><div class="ttdeci">bool operator==(const SparseBitVector &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
113
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a465b415217533f1f0026bec837495fdd"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a465b415217533f1f0026bec837495fdd">SVF::SparseBitVectorElement::test</a></div><div class="ttdeci">bool test(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00296">SparseBitVector.h:296</a></div></div>
|
|
114
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a346d500f11666f4746237f42a8d67fc1"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a346d500f11666f4746237f42a8d67fc1">SVF::SparseBitVector::SparseBitVectorIterator::AdvanceToNextNonZero</a></div><div class="ttdeci">void AdvanceToNextNonZero()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00567">SparseBitVector.h:567</a></div></div>
|
|
115
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a816d96bad46fde34b3848bf08dc6cdf5"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a816d96bad46fde34b3848bf08dc6cdf5">SVF::SparseBitVector::operator==</a></div><div class="ttdeci">bool operator==(const SparseBitVector &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00784">SparseBitVector.h:784</a></div></div>
|
|
118
116
|
<div class="ttc" id="namespaceSVF_html_af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7"><div class="ttname"><a href="namespaceSVF.html#af5b6ec9770091c42227a45491b00b349afdacc59903d2677ef91777d78c7b80a7">SVF::ZB_Width</a></div><div class="ttdoc">The returned value is numeric_limits<T>::digits. </div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00039">SparseBitVector.h:39</a></div></div>
|
|
119
|
-
<div class="ttc" id="
|
|
120
|
-
<div class="ttc" id="
|
|
121
|
-
<div class="ttc" id="
|
|
122
|
-
<div class="ttc" id="
|
|
117
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a8bb2c6e68fadfae0428bc6ce5d63ad88"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a8bb2c6e68fadfae0428bc6ce5d63ad88">SVF::SparseBitVector::SparseBitVector</a></div><div class="ttdeci">SparseBitVector(SparseBitVector &&RHS) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00673">SparseBitVector.h:673</a></div></div>
|
|
118
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a74ab73c1674200bb4560070c8b10346d"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a74ab73c1674200bb4560070c8b10346d">SVF::SparseBitVector::ElementList</a></div><div class="ttdeci">std::list< SparseBitVectorElement< ElementSize > > ElementList</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00456">SparseBitVector.h:456</a></div></div>
|
|
119
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_ac721b283253b7bd96fedd5f12c079699"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#ac721b283253b7bd96fedd5f12c079699">SVF::SparseBitVectorElement::intersectWithComplement</a></div><div class="ttdeci">bool intersectWithComplement(const SparseBitVectorElement &RHS, bool &BecameZero)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00412">SparseBitVector.h:412</a></div></div>
|
|
120
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a1b5abe09fd0fcd337385653cb47343c1"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">SVF::SparseBitVector::end</a></div><div class="ttdeci">iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01112">SparseBitVector.h:1112</a></div></div>
|
|
121
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a1d79c099887fcf01f5c0743b38caf39d"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a1d79c099887fcf01f5c0743b38caf39d">SVF::SparseBitVectorElement::find_last</a></div><div class="ttdeci">int find_last() const</div><div class="ttdoc">find_last - Returns the index of the last set bit. </div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00320">SparseBitVector.h:320</a></div></div>
|
|
123
122
|
<div class="ttc" id="namespaceSVF_html_af897f6692f1f6aa13d897f89b3370d0d"><div class="ttname"><a href="namespaceSVF.html#af897f6692f1f6aa13d897f89b3370d0d">SVF::countLeadingZeros</a></div><div class="ttdeci">unsigned countLeadingZeros(T Val, ZeroBehavior ZB=ZB_Width)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00169">SparseBitVector.h:169</a></div></div>
|
|
124
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a34e70705e4618e6d79a19ee7725e4960"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a34e70705e4618e6d79a19ee7725e4960">SVF::SparseBitVectorElement::unionWith</a></div><div class="ttdeci">bool unionWith(const SparseBitVectorElement &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
125
|
-
<div class="ttc" id="namespaceSVF_html_a97ff28f5dfd5c31e6ef351de3cdad85d"><div class="ttname"><a href="namespaceSVF.html#a97ff28f5dfd5c31e6ef351de3cdad85d">SVF::operator|=</a></div><div class="ttdeci">bool operator|=(SparseBitVector< ElementSize > &LHS, const SparseBitVector< ElementSize > *RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
126
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_adeed46c25650bdbccdef0519906d1030"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#adeed46c25650bdbccdef0519906d1030">SVF::SparseBitVector::operator=</a></div><div class="ttdeci">SparseBitVector & operator=(const SparseBitVector &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
127
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a16756e0545fd3d50ab89f45a2e83bb79"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">SVF::SparseBitVector::intersects</a></div><div class="ttdeci">bool intersects(const SparseBitVector< ElementSize > *RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
128
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a5fe4841ca223f13c2aeec4c6e69a7b43"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5fe4841ca223f13c2aeec4c6e69a7b43">SVF::SparseBitVector::SparseBitVectorIterator::SparseBitVectorIterator</a></div><div class="ttdeci">SparseBitVectorIterator(const SparseBitVector< ElementSize > *RHS, bool end=false)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
123
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a34e70705e4618e6d79a19ee7725e4960"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a34e70705e4618e6d79a19ee7725e4960">SVF::SparseBitVectorElement::unionWith</a></div><div class="ttdeci">bool unionWith(const SparseBitVectorElement &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00360">SparseBitVector.h:360</a></div></div>
|
|
124
|
+
<div class="ttc" id="namespaceSVF_html_a97ff28f5dfd5c31e6ef351de3cdad85d"><div class="ttname"><a href="namespaceSVF.html#a97ff28f5dfd5c31e6ef351de3cdad85d">SVF::operator|=</a></div><div class="ttdeci">bool operator|=(SparseBitVector< ElementSize > &LHS, const SparseBitVector< ElementSize > *RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01122">SparseBitVector.h:1122</a></div></div>
|
|
125
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_adeed46c25650bdbccdef0519906d1030"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#adeed46c25650bdbccdef0519906d1030">SVF::SparseBitVector::operator=</a></div><div class="ttdeci">SparseBitVector & operator=(const SparseBitVector &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00683">SparseBitVector.h:683</a></div></div>
|
|
126
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a16756e0545fd3d50ab89f45a2e83bb79"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a16756e0545fd3d50ab89f45a2e83bb79">SVF::SparseBitVector::intersects</a></div><div class="ttdeci">bool intersects(const SparseBitVector< ElementSize > *RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01023">SparseBitVector.h:1023</a></div></div>
|
|
127
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a5fe4841ca223f13c2aeec4c6e69a7b43"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5fe4841ca223f13c2aeec4c6e69a7b43">SVF::SparseBitVector::SparseBitVectorIterator::SparseBitVectorIterator</a></div><div class="ttdeci">SparseBitVectorIterator(const SparseBitVector< ElementSize > *RHS, bool end=false)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00616">SparseBitVector.h:616</a></div></div>
|
|
129
128
|
<div class="ttc" id="structSVF_1_1PopulationCounter_3_01T_00_018_01_4_html_a6b0aabdd55f93d2b5ea8df270a14a0ec"><div class="ttname"><a href="structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html#a6b0aabdd55f93d2b5ea8df270a14a0ec">SVF::PopulationCounter< T, 8 >::count</a></div><div class="ttdeci">static unsigned count(T Value)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00179">SparseBitVector.h:179</a></div></div>
|
|
130
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ab4787f96a5f7cab926f9c7426aa92fc1"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ab4787f96a5f7cab926f9c7426aa92fc1">SVF::SparseBitVector::FindLowerBoundConst</a></div><div class="ttdeci">ElementListConstIter FindLowerBoundConst(unsigned ElementIndex) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
131
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a74ded252b99e70cb999b869a5250948e"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a74ded252b99e70cb999b869a5250948e">SVF::SparseBitVector::operator=</a></div><div class="ttdeci">SparseBitVector & operator=(SparseBitVector &&RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
132
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ab094576b73de3c8580ea152f90d63636"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">SVF::SparseBitVector::Elements</a></div><div class="ttdeci">ElementList Elements</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
133
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a4f618377a31eba119de672b0be4936bc"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a4f618377a31eba119de672b0be4936bc">SVF::SparseBitVector::SparseBitVector</a></div><div class="ttdeci">SparseBitVector()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
134
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_aa28c3c88d66d8bc3dbf96e2f4bd84fab"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab">SVF::SparseBitVector::SparseBitVectorIterator::AtEnd</a></div><div class="ttdeci">bool AtEnd</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
135
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_abf76d8157c49ddba24bdc9dab3655772"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">SVF::SparseBitVector::begin</a></div><div class="ttdeci">iterator begin() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
136
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a9cb4261779da0cbeb8d09b8fbd5cf557"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a9cb4261779da0cbeb8d09b8fbd5cf557">SVF::SparseBitVector::SparseBitVector</a></div><div class="ttdeci">SparseBitVector(const SparseBitVector &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
137
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a4ec765790960025d3468866c326ab87b"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a4ec765790960025d3468866c326ab87b">SVF::SparseBitVectorElement::SparseBitVectorElement</a></div><div class="ttdeci">SparseBitVectorElement()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00234">SparseBitVector.h:234</a></div></div>
|
|
129
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ab4787f96a5f7cab926f9c7426aa92fc1"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ab4787f96a5f7cab926f9c7426aa92fc1">SVF::SparseBitVector::FindLowerBoundConst</a></div><div class="ttdeci">ElementListConstIter FindLowerBoundConst(unsigned ElementIndex) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00517">SparseBitVector.h:517</a></div></div>
|
|
130
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a74ded252b99e70cb999b869a5250948e"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a74ded252b99e70cb999b869a5250948e">SVF::SparseBitVector::operator=</a></div><div class="ttdeci">SparseBitVector & operator=(SparseBitVector &&RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00692">SparseBitVector.h:692</a></div></div>
|
|
131
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ab094576b73de3c8580ea152f90d63636"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ab094576b73de3c8580ea152f90d63636">SVF::SparseBitVector::Elements</a></div><div class="ttdeci">ElementList Elements</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00464">SparseBitVector.h:464</a></div></div>
|
|
132
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a4f618377a31eba119de672b0be4936bc"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a4f618377a31eba119de672b0be4936bc">SVF::SparseBitVector::SparseBitVector</a></div><div class="ttdeci">SparseBitVector()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00669">SparseBitVector.h:669</a></div></div>
|
|
133
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_aa28c3c88d66d8bc3dbf96e2f4bd84fab"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#aa28c3c88d66d8bc3dbf96e2f4bd84fab">SVF::SparseBitVector::SparseBitVectorIterator::AtEnd</a></div><div class="ttdeci">bool AtEnd</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00531">SparseBitVector.h:531</a></div></div>
|
|
134
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_abf76d8157c49ddba24bdc9dab3655772"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">SVF::SparseBitVector::begin</a></div><div class="ttdeci">iterator begin() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01107">SparseBitVector.h:1107</a></div></div>
|
|
135
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a9cb4261779da0cbeb8d09b8fbd5cf557"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a9cb4261779da0cbeb8d09b8fbd5cf557">SVF::SparseBitVector::SparseBitVector</a></div><div class="ttdeci">SparseBitVector(const SparseBitVector &RHS)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00671">SparseBitVector.h:671</a></div></div>
|
|
138
136
|
<div class="ttc" id="classSVF_1_1BitVector_html"><div class="ttname"><a href="classSVF_1_1BitVector.html">SVF::BitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="BitVector_8h_source.html#l00031">BitVector.h:31</a></div></div>
|
|
139
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
140
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_afee44821475fa31f218fb743b264cb37"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#afee44821475fa31f218fb743b264cb37">SVF::SparseBitVector::intersectWithComplement</a></div><div class="ttdeci">void intersectWithComplement(const SparseBitVector< ElementSize > &RHS1, const SparseBitVector< ElementSize > &RHS2)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
141
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a75777b1461184d8fb2cfa4ec6e95c1c5"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a75777b1461184d8fb2cfa4ec6e95c1c5">SVF::SparseBitVectorElement::SparseBitVectorElement</a></div><div class="ttdeci">SparseBitVectorElement(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
137
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00454">SparseBitVector.h:454</a></div></div>
|
|
138
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_afee44821475fa31f218fb743b264cb37"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#afee44821475fa31f218fb743b264cb37">SVF::SparseBitVector::intersectWithComplement</a></div><div class="ttdeci">void intersectWithComplement(const SparseBitVector< ElementSize > &RHS1, const SparseBitVector< ElementSize > &RHS2)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00962">SparseBitVector.h:962</a></div></div>
|
|
139
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a75777b1461184d8fb2cfa4ec6e95c1c5"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a75777b1461184d8fb2cfa4ec6e95c1c5">SVF::SparseBitVectorElement::SparseBitVectorElement</a></div><div class="ttdeci">SparseBitVectorElement(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00237">SparseBitVector.h:237</a></div></div>
|
|
142
140
|
<div class="ttc" id="structSVF_1_1PopulationCounter_html_aa49a07f6be7991ffe42af5445b38d59b"><div class="ttname"><a href="structSVF_1_1PopulationCounter.html#aa49a07f6be7991ffe42af5445b38d59b">SVF::PopulationCounter::count</a></div><div class="ttdeci">static unsigned count(T Value)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00087">SparseBitVector.h:87</a></div></div>
|
|
143
141
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00037">AbstractValue.h:37</a></div></div>
|
|
144
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a7fc92990c6a09c33c3676ab47807bc68"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a7fc92990c6a09c33c3676ab47807bc68">SVF::SparseBitVector::SparseBitVectorIterator::operator==</a></div><div class="ttdeci">bool operator==(const SparseBitVectorIterator &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
145
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_aa812f8538b869b004791b4177c50069b"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#aa812f8538b869b004791b4177c50069b">SVF::SparseBitVectorElement::operator!=</a></div><div class="ttdeci">bool operator!=(const SparseBitVectorElement &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
146
|
-
<div class="ttc" id="namespaceSVF_html_aae350f79ebcb9efd22ec9efa6678cd13"><div class="ttname"><a href="namespaceSVF.html#aae350f79ebcb9efd22ec9efa6678cd13">SVF::dump</a></div><div class="ttdeci">void dump(const SparseBitVector< ElementSize > &LHS, std::ostream &out)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
142
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a7fc92990c6a09c33c3676ab47807bc68"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a7fc92990c6a09c33c3676ab47807bc68">SVF::SparseBitVector::SparseBitVectorIterator::operator==</a></div><div class="ttdeci">bool operator==(const SparseBitVectorIterator &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00650">SparseBitVector.h:650</a></div></div>
|
|
143
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_aa812f8538b869b004791b4177c50069b"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#aa812f8538b869b004791b4177c50069b">SVF::SparseBitVectorElement::operator!=</a></div><div class="ttdeci">bool operator!=(const SparseBitVectorElement &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00250">SparseBitVector.h:250</a></div></div>
|
|
144
|
+
<div class="ttc" id="namespaceSVF_html_aae350f79ebcb9efd22ec9efa6678cd13"><div class="ttname"><a href="namespaceSVF.html#aae350f79ebcb9efd22ec9efa6678cd13">SVF::dump</a></div><div class="ttdeci">void dump(const SparseBitVector< ElementSize > &LHS, std::ostream &out)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01183">SparseBitVector.h:1183</a></div></div>
|
|
147
145
|
<div class="ttc" id="cJSON_8cpp_html_a7669ee67a0563250c1efaa24d130e1ac"><div class="ttname"><a href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a></div><div class="ttdeci">copy</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00414">cJSON.cpp:414</a></div></div>
|
|
148
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a5afe3e74412a1f3f728d7e0eaae70c13"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a5afe3e74412a1f3f728d7e0eaae70c13">SVF::SparseBitVector::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
149
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a8484d923c29872843b0d0ffcebf4d112"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a8484d923c29872843b0d0ffcebf4d112">SVF::SparseBitVectorElement::operator==</a></div><div class="ttdeci">bool operator==(const SparseBitVectorElement &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
150
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ad53d20775e5445a438f579743aa77cf3"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ad53d20775e5445a438f579743aa77cf3">SVF::SparseBitVector::FindLowerBoundImpl</a></div><div class="ttdeci">ElementListIter FindLowerBoundImpl(unsigned ElementIndex) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
151
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_acdc2e97bfeeba3a91d8793992df9451f"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">SVF::SparseBitVector::ElementListConstIter</a></div><div class="ttdeci">typename ElementList::const_iterator ElementListConstIter</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
152
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a399721230d13a4153766e6e8ed1f9aed"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">SVF::SparseBitVector::ElementListIter</a></div><div class="ttdeci">typename ElementList::iterator ElementListIter</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
153
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_acced4edf716af14a6931156d59e50632"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#acced4edf716af14a6931156d59e50632">SVF::SparseBitVectorElement::reset</a></div><div class="ttdeci">void reset(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
146
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a5afe3e74412a1f3f728d7e0eaae70c13"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a5afe3e74412a1f3f728d7e0eaae70c13">SVF::SparseBitVector::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00677">SparseBitVector.h:677</a></div></div>
|
|
147
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a8484d923c29872843b0d0ffcebf4d112"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a8484d923c29872843b0d0ffcebf4d112">SVF::SparseBitVectorElement::operator==</a></div><div class="ttdeci">bool operator==(const SparseBitVectorElement &RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00240">SparseBitVector.h:240</a></div></div>
|
|
148
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_ad53d20775e5445a438f579743aa77cf3"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#ad53d20775e5445a438f579743aa77cf3">SVF::SparseBitVector::FindLowerBoundImpl</a></div><div class="ttdeci">ElementListIter FindLowerBoundImpl(unsigned ElementIndex) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00472">SparseBitVector.h:472</a></div></div>
|
|
149
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_acdc2e97bfeeba3a91d8793992df9451f"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#acdc2e97bfeeba3a91d8793992df9451f">SVF::SparseBitVector::ElementListConstIter</a></div><div class="ttdeci">typename ElementList::const_iterator ElementListConstIter</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00458">SparseBitVector.h:458</a></div></div>
|
|
150
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a399721230d13a4153766e6e8ed1f9aed"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a399721230d13a4153766e6e8ed1f9aed">SVF::SparseBitVector::ElementListIter</a></div><div class="ttdeci">typename ElementList::iterator ElementListIter</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00457">SparseBitVector.h:457</a></div></div>
|
|
151
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_acced4edf716af14a6931156d59e50632"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#acced4edf716af14a6931156d59e50632">SVF::SparseBitVectorElement::reset</a></div><div class="ttdeci">void reset(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00291">SparseBitVector.h:291</a></div></div>
|
|
154
152
|
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_ae5c5ac3afef47499a4e852de0dc39c18"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#ae5c5ac3afef47499a4e852de0dc39c18">SVF::SparseBitVectorElement::ElementIndex</a></div><div class="ttdeci">unsigned ElementIndex</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00231">SparseBitVector.h:231</a></div></div>
|
|
155
153
|
<div class="ttc" id="structSVF_1_1PopulationCounter_html"><div class="ttname"><a href="structSVF_1_1PopulationCounter.html">SVF::PopulationCounter</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00085">SparseBitVector.h:85</a></div></div>
|
|
156
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a5d43d980591d14d3a3d0782be034ed4f"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">SVF::SparseBitVectorElement::word</a></div><div class="ttdeci">BitWord word(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
154
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a5d43d980591d14d3a3d0782be034ed4f"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a5d43d980591d14d3a3d0782be034ed4f">SVF::SparseBitVectorElement::word</a></div><div class="ttdeci">BitWord word(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00256">SparseBitVector.h:256</a></div></div>
|
|
157
155
|
<div class="ttc" id="structSVF_1_1TrailingZerosCounter_html"><div class="ttname"><a href="structSVF_1_1TrailingZerosCounter.html">SVF::TrailingZerosCounter</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00042">SparseBitVector.h:42</a></div></div>
|
|
158
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a2f62812b261a83b19aab46c0961bfcb4"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a2f62812b261a83b19aab46c0961bfcb4">SVF::SparseBitVectorElement::intersectWith</a></div><div class="ttdeci">bool intersectWith(const SparseBitVectorElement &RHS, bool &BecameZero)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
159
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a5e213fe330a23d22c8cf2b0624f73de7"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5e213fe330a23d22c8cf2b0624f73de7">SVF::SparseBitVector::SparseBitVectorIterator::AdvanceToFirstNonZero</a></div><div class="ttdeci">void AdvanceToFirstNonZero()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
156
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a2f62812b261a83b19aab46c0961bfcb4"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a2f62812b261a83b19aab46c0961bfcb4">SVF::SparseBitVectorElement::intersectWith</a></div><div class="ttdeci">bool intersectWith(const SparseBitVectorElement &RHS, bool &BecameZero)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00387">SparseBitVector.h:387</a></div></div>
|
|
157
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html_a5e213fe330a23d22c8cf2b0624f73de7"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html#a5e213fe330a23d22c8cf2b0624f73de7">SVF::SparseBitVector::SparseBitVectorIterator::AdvanceToFirstNonZero</a></div><div class="ttdeci">void AdvanceToFirstNonZero()</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00548">SparseBitVector.h:548</a></div></div>
|
|
160
158
|
<div class="ttc" id="structSVF_1_1LeadingZerosCounter_html_ad85fa905e96374d79a832a027226d8d3"><div class="ttname"><a href="structSVF_1_1LeadingZerosCounter.html#ad85fa905e96374d79a832a027226d8d3">SVF::LeadingZerosCounter::count</a></div><div class="ttdeci">static unsigned count(T Val, ZeroBehavior)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00104">SparseBitVector.h:104</a></div></div>
|
|
161
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_ac3a4795681af74563d757f587252aa7f"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#ac3a4795681af74563d757f587252aa7f">SVF::SparseBitVectorElement::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
162
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_aaab743995d5dd1359b0f541dacc1dcf3"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#aaab743995d5dd1359b0f541dacc1dcf3">SVF::SparseBitVector::intersectWithComplement</a></div><div class="ttdeci">bool intersectWithComplement(const SparseBitVector< ElementSize > *RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
159
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_ac3a4795681af74563d757f587252aa7f"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#ac3a4795681af74563d757f587252aa7f">SVF::SparseBitVectorElement::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00267">SparseBitVector.h:267</a></div></div>
|
|
160
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_aaab743995d5dd1359b0f541dacc1dcf3"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#aaab743995d5dd1359b0f541dacc1dcf3">SVF::SparseBitVector::intersectWithComplement</a></div><div class="ttdeci">bool intersectWithComplement(const SparseBitVector< ElementSize > *RHS) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00955">SparseBitVector.h:955</a></div></div>
|
|
163
161
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00056">BasicTypes.h:56</a></div></div>
|
|
164
|
-
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a60a023744119cd0424511ea1e83b76e1"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a60a023744119cd0424511ea1e83b76e1">SVF::SparseBitVectorElement::find_next</a></div><div class="ttdeci">int find_next(unsigned Curr) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
162
|
+
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html_a60a023744119cd0424511ea1e83b76e1"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html#a60a023744119cd0424511ea1e83b76e1">SVF::SparseBitVectorElement::find_next</a></div><div class="ttdeci">int find_next(unsigned Curr) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00335">SparseBitVector.h:335</a></div></div>
|
|
165
163
|
<div class="ttc" id="structSVF_1_1SparseBitVectorElement_html"><div class="ttname"><a href="structSVF_1_1SparseBitVectorElement.html">SVF::SparseBitVectorElement</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00217">SparseBitVector.h:217</a></div></div>
|
|
166
|
-
<div class="ttc" id="classSVF_1_1SparseBitVector_html_aea5389ad7e5fe4c8bef686940a1a6056"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#aea5389ad7e5fe4c8bef686940a1a6056">SVF::SparseBitVector::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#
|
|
164
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_aea5389ad7e5fe4c8bef686940a1a6056"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#aea5389ad7e5fe4c8bef686940a1a6056">SVF::SparseBitVector::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01091">SparseBitVector.h:1091</a></div></div>
|
|
167
165
|
</div><!-- fragment --></div><!-- contents -->
|
|
168
166
|
<!-- start footer part -->
|
|
169
167
|
<hr class="footer"/><address class="footer"><small>
|