svf-tools 1.0.619 → 1.0.621
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/Andersen_8h_source.html +4 -3
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +9 -4
- package/SVF-doxygen/html/html/CFLAlias_8h.html +4 -0
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +19 -10
- package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CFLBase_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLDataBuilder_8h.html +96 -0
- package/SVF-doxygen/html/html/CFLDataBuilder_8h_source.html +99 -0
- package/SVF-doxygen/html/html/CFLData_8h.html +106 -0
- package/SVF-doxygen/html/html/CFLData_8h_source.html +136 -0
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/CFLSolver_8h.html +4 -0
- package/SVF-doxygen/html/html/CFLSolver_8h_source.html +22 -16
- package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CommandLine_8h.html +129 -0
- package/SVF-doxygen/html/html/CommandLine_8h_source.html +132 -0
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +20 -19
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +9 -9
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/GraphWriter_8cpp_source.html +2 -1
- package/SVF-doxygen/html/html/GraphWriter_8h_source.html +2 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +21 -20
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +17 -17
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/Options_8cpp.html +1 -0
- package/SVF-doxygen/html/html/Options_8cpp_source.html +124 -119
- package/SVF-doxygen/html/html/Options_8h.html +1 -1
- package/SVF-doxygen/html/html/Options_8h_source.html +125 -120
- package/SVF-doxygen/html/html/PCG_8cpp.html +2 -1
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +13 -12
- package/SVF-doxygen/html/html/PCG_8h_source.html +12 -12
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +4 -3
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +5 -4
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFType_8h.html +2 -2
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +10 -9
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +4 -4
- package/SVF-doxygen/html/html/Z3Expr_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/annotated.html +363 -353
- package/SVF-doxygen/html/html/cfl_8cpp.html +3 -85
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +3 -5
- package/SVF-doxygen/html/html/classOption-members.html +99 -0
- package/SVF-doxygen/html/html/classOption.html +567 -0
- package/SVF-doxygen/html/html/classOption.png +0 -0
- package/SVF-doxygen/html/html/classOptionBase-members.html +95 -0
- package/SVF-doxygen/html/html/classOptionBase.html +823 -0
- package/SVF-doxygen/html/html/classOptionBase.png +0 -0
- package/SVF-doxygen/html/html/classOptionMap-members.html +97 -0
- package/SVF-doxygen/html/html/classOptionMap.html +428 -0
- package/SVF-doxygen/html/html/classOptionMap.png +0 -0
- package/SVF-doxygen/html/html/classOptionMultiple-members.html +97 -0
- package/SVF-doxygen/html/html/classOptionMultiple.html +460 -0
- package/SVF-doxygen/html/html/classOptionMultiple.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +16 -15
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +7 -6
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +33 -30
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +9 -8
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLData-members.html +110 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLData.html +1126 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLDataBuilder-members.html +88 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLDataBuilder.html +380 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +48 -39
- package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +72 -72
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +36 -35
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +22 -8
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GraphWriter.html +3 -2
- package/SVF-doxygen/html/html/classSVF_1_1HybridData-members.html +89 -0
- package/SVF-doxygen/html/html/classSVF_1_1HybridData.html +449 -0
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntervalExeState.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +73 -72
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +121 -120
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +641 -615
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1POCRAlias-members.html +281 -0
- package/SVF-doxygen/html/html/classSVF_1_1POCRAlias.html +828 -0
- package/SVF-doxygen/html/html/classSVF_1_1POCRAlias.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1POCRSolver-members.html +98 -0
- package/SVF-doxygen/html/html/classSVF_1_1POCRSolver.html +245 -0
- package/SVF-doxygen/html/html/classSVF_1_1POCRSolver.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +9 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SVFType.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +27 -26
- package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +6 -6
- package/SVF-doxygen/html/html/classes.html +110 -108
- package/SVF-doxygen/html/html/dda_8cpp.html +51 -248
- package/SVF-doxygen/html/html/dda_8cpp_source.html +9 -10
- package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
- package/SVF-doxygen/html/html/dir_ae8aa099e368efaa962140c6624142bc.html +4 -0
- package/SVF-doxygen/html/html/files.html +27 -24
- package/SVF-doxygen/html/html/functions.html +7 -1
- package/SVF-doxygen/html/html/functions_0x7e.html +18 -0
- package/SVF-doxygen/html/html/functions_a.html +45 -21
- package/SVF-doxygen/html/html/functions_b.html +15 -7
- package/SVF-doxygen/html/html/functions_c.html +72 -49
- package/SVF-doxygen/html/html/functions_d.html +25 -16
- package/SVF-doxygen/html/html/functions_e.html +11 -4
- package/SVF-doxygen/html/html/functions_f.html +19 -16
- package/SVF-doxygen/html/html/functions_func.html +35 -11
- package/SVF-doxygen/html/html/functions_func_0x7e.html +18 -0
- package/SVF-doxygen/html/html/functions_func_b.html +11 -3
- package/SVF-doxygen/html/html/functions_func_c.html +55 -34
- package/SVF-doxygen/html/html/functions_func_e.html +5 -1
- package/SVF-doxygen/html/html/functions_func_f.html +4 -1
- package/SVF-doxygen/html/html/functions_func_g.html +26 -7
- package/SVF-doxygen/html/html/functions_func_h.html +10 -3
- package/SVF-doxygen/html/html/functions_func_i.html +25 -10
- package/SVF-doxygen/html/html/functions_func_m.html +3 -2
- package/SVF-doxygen/html/html/functions_func_n.html +4 -1
- package/SVF-doxygen/html/html/functions_func_o.html +23 -6
- package/SVF-doxygen/html/html/functions_func_p.html +15 -3
- package/SVF-doxygen/html/html/functions_func_s.html +20 -19
- package/SVF-doxygen/html/html/functions_func_t.html +3 -0
- package/SVF-doxygen/html/html/functions_func_u.html +3 -0
- package/SVF-doxygen/html/html/functions_g.html +28 -9
- package/SVF-doxygen/html/html/functions_h.html +13 -6
- package/SVF-doxygen/html/html/functions_i.html +44 -20
- package/SVF-doxygen/html/html/functions_k.html +1 -1
- package/SVF-doxygen/html/html/functions_l.html +4 -4
- package/SVF-doxygen/html/html/functions_m.html +14 -13
- package/SVF-doxygen/html/html/functions_n.html +9 -5
- package/SVF-doxygen/html/html/functions_o.html +48 -25
- package/SVF-doxygen/html/html/functions_p.html +65 -34
- package/SVF-doxygen/html/html/functions_r.html +7 -9
- package/SVF-doxygen/html/html/functions_s.html +34 -32
- package/SVF-doxygen/html/html/functions_t.html +17 -8
- package/SVF-doxygen/html/html/functions_type_c.html +2 -1
- package/SVF-doxygen/html/html/functions_type_d.html +3 -0
- package/SVF-doxygen/html/html/functions_type_i.html +2 -1
- package/SVF-doxygen/html/html/functions_type_o.html +7 -0
- package/SVF-doxygen/html/html/functions_type_p.html +6 -0
- package/SVF-doxygen/html/html/functions_type_t.html +3 -0
- package/SVF-doxygen/html/html/functions_u.html +6 -3
- package/SVF-doxygen/html/html/functions_v.html +7 -5
- package/SVF-doxygen/html/html/functions_vars.html +7 -1
- package/SVF-doxygen/html/html/functions_vars_a.html +7 -7
- package/SVF-doxygen/html/html/functions_vars_b.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_c.html +15 -12
- package/SVF-doxygen/html/html/functions_vars_d.html +21 -15
- package/SVF-doxygen/html/html/functions_vars_e.html +5 -2
- package/SVF-doxygen/html/html/functions_vars_f.html +6 -6
- package/SVF-doxygen/html/html/functions_vars_g.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_h.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_i.html +14 -6
- package/SVF-doxygen/html/html/functions_vars_k.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_l.html +4 -4
- package/SVF-doxygen/html/html/functions_vars_m.html +11 -11
- package/SVF-doxygen/html/html/functions_vars_n.html +3 -2
- package/SVF-doxygen/html/html/functions_vars_o.html +5 -2
- package/SVF-doxygen/html/html/functions_vars_p.html +34 -21
- package/SVF-doxygen/html/html/functions_vars_r.html +5 -5
- package/SVF-doxygen/html/html/functions_vars_s.html +13 -10
- package/SVF-doxygen/html/html/functions_vars_t.html +7 -4
- package/SVF-doxygen/html/html/functions_vars_u.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_v.html +6 -4
- package/SVF-doxygen/html/html/functions_vars_w.html +3 -3
- package/SVF-doxygen/html/html/functions_w.html +11 -7
- package/SVF-doxygen/html/html/globals_d.html +4 -4
- package/SVF-doxygen/html/html/globals_e.html +6 -6
- package/SVF-doxygen/html/html/globals_f.html +2 -2
- package/SVF-doxygen/html/html/globals_func.html +6 -58
- package/SVF-doxygen/html/html/globals_i.html +4 -12
- package/SVF-doxygen/html/html/globals_l.html +2 -2
- package/SVF-doxygen/html/html/globals_r.html +4 -4
- package/SVF-doxygen/html/html/globals_s.html +0 -4
- package/SVF-doxygen/html/html/globals_type.html +3 -0
- package/SVF-doxygen/html/html/globals_u.html +3 -0
- package/SVF-doxygen/html/html/globals_vars.html +43 -12
- package/SVF-doxygen/html/html/hierarchy.html +517 -496
- package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/menudata.js +1 -2
- package/SVF-doxygen/html/html/mta_8cpp.html +4 -47
- package/SVF-doxygen/html/html/mta_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/namespaceSVF.html +29 -0
- package/SVF-doxygen/html/html/namespaceSVF_1_1DOT.html +3 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
- package/SVF-doxygen/html/html/namespacemembers_l.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_l.html +3 -0
- package/SVF-doxygen/html/html/saber_8cpp.html +38 -136
- package/SVF-doxygen/html/html/saber_8cpp_source.html +8 -7
- package/SVF-doxygen/html/html/search/all_0.js +2 -1
- package/SVF-doxygen/html/html/search/all_1.js +15 -8
- package/SVF-doxygen/html/html/search/all_10.js +33 -25
- package/SVF-doxygen/html/html/search/all_11.js +9 -9
- package/SVF-doxygen/html/html/search/all_12.js +22 -22
- package/SVF-doxygen/html/html/search/all_13.js +14 -11
- package/SVF-doxygen/html/html/search/all_14.js +5 -4
- package/SVF-doxygen/html/html/search/all_15.js +5 -5
- package/SVF-doxygen/html/html/search/all_16.js +4 -4
- package/SVF-doxygen/html/html/search/all_19.js +6 -0
- package/SVF-doxygen/html/html/search/all_2.js +5 -3
- package/SVF-doxygen/html/html/search/all_3.js +25 -18
- package/SVF-doxygen/html/html/search/all_4.js +20 -18
- package/SVF-doxygen/html/html/search/all_5.js +8 -6
- package/SVF-doxygen/html/html/search/all_6.js +9 -8
- package/SVF-doxygen/html/html/search/all_7.js +9 -3
- package/SVF-doxygen/html/html/search/all_8.js +5 -3
- package/SVF-doxygen/html/html/search/all_9.js +16 -11
- package/SVF-doxygen/html/html/search/all_b.js +2 -2
- package/SVF-doxygen/html/html/search/all_c.js +7 -6
- package/SVF-doxygen/html/html/search/all_d.js +13 -13
- package/SVF-doxygen/html/html/search/all_e.js +4 -3
- package/SVF-doxygen/html/html/search/all_f.js +24 -6
- package/SVF-doxygen/html/html/search/classes_10.js +1 -0
- package/SVF-doxygen/html/html/search/classes_2.js +2 -0
- package/SVF-doxygen/html/html/search/classes_7.js +2 -1
- package/SVF-doxygen/html/html/search/classes_c.js +15 -0
- package/SVF-doxygen/html/html/search/classes_d.js +2 -0
- package/SVF-doxygen/html/html/search/files_2.js +3 -0
- package/SVF-doxygen/html/html/search/functions_0.js +8 -1
- package/SVF-doxygen/html/html/search/functions_1.js +4 -2
- package/SVF-doxygen/html/html/search/functions_10.js +0 -2
- package/SVF-doxygen/html/html/search/functions_11.js +2 -3
- package/SVF-doxygen/html/html/search/functions_12.js +1 -0
- package/SVF-doxygen/html/html/search/functions_13.js +1 -0
- package/SVF-doxygen/html/html/search/functions_17.js +6 -0
- package/SVF-doxygen/html/html/search/functions_2.js +5 -1
- package/SVF-doxygen/html/html/search/functions_3.js +0 -2
- package/SVF-doxygen/html/html/search/functions_4.js +2 -4
- package/SVF-doxygen/html/html/search/functions_5.js +2 -1
- package/SVF-doxygen/html/html/search/functions_6.js +7 -1
- package/SVF-doxygen/html/html/search/functions_7.js +4 -2
- package/SVF-doxygen/html/html/search/functions_8.js +6 -3
- package/SVF-doxygen/html/html/search/functions_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_c.js +1 -1
- package/SVF-doxygen/html/html/search/functions_d.js +1 -0
- package/SVF-doxygen/html/html/search/functions_e.js +7 -3
- package/SVF-doxygen/html/html/search/functions_f.js +3 -0
- package/SVF-doxygen/html/html/search/typedefs_11.js +2 -1
- package/SVF-doxygen/html/html/search/typedefs_12.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_3.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_7.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_a.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_d.js +2 -0
- package/SVF-doxygen/html/html/search/typedefs_e.js +2 -0
- package/SVF-doxygen/html/html/search/variables_0.js +2 -1
- package/SVF-doxygen/html/html/search/variables_1.js +7 -7
- package/SVF-doxygen/html/html/search/variables_10.js +25 -21
- package/SVF-doxygen/html/html/search/variables_11.js +7 -5
- package/SVF-doxygen/html/html/search/variables_12.js +11 -10
- package/SVF-doxygen/html/html/search/variables_13.js +9 -8
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_15.js +4 -4
- package/SVF-doxygen/html/html/search/variables_16.js +3 -3
- package/SVF-doxygen/html/html/search/variables_2.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +13 -12
- package/SVF-doxygen/html/html/search/variables_4.js +19 -15
- package/SVF-doxygen/html/html/search/variables_5.js +6 -2
- package/SVF-doxygen/html/html/search/variables_6.js +7 -6
- package/SVF-doxygen/html/html/search/variables_7.js +2 -2
- package/SVF-doxygen/html/html/search/variables_8.js +1 -1
- package/SVF-doxygen/html/html/search/variables_9.js +9 -7
- package/SVF-doxygen/html/html/search/variables_b.js +1 -1
- package/SVF-doxygen/html/html/search/variables_c.js +5 -4
- package/SVF-doxygen/html/html/search/variables_d.js +11 -11
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/search/variables_f.js +3 -2
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +4 -4
- 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 +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +4 -4
- package/SVF-doxygen/html/html/structSVF_1_1HybridData_1_1TreeNode-members.html +86 -0
- package/SVF-doxygen/html/html/structSVF_1_1HybridData_1_1TreeNode.html +255 -0
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +12 -55
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp.html +4 -47
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +4 -4
- package/include/CFL/CFLAlias.h +34 -0
- package/include/CFL/CFLData.h +316 -0
- package/include/CFL/CFLDataBuilder.h +91 -0
- package/include/CFL/CFLSolver.h +21 -0
- package/include/Util/CommandLine.h +527 -0
- package/include/Util/Options.h +125 -124
- package/include/WPA/Andersen.h +5 -5
- package/lib/AbstractExecution/SVFIR2ItvExeState.cpp +2 -2
- package/lib/CFL/CFLAlias.cpp +40 -4
- package/lib/CFL/CFLBase.cpp +4 -4
- package/lib/CFL/CFLGraphBuilder.cpp +2 -2
- package/lib/CFL/CFLVF.cpp +5 -5
- package/lib/DDA/ContextDDA.cpp +1 -1
- package/lib/DDA/DDAPass.cpp +14 -13
- package/lib/DDA/FlowDDA.cpp +1 -1
- package/lib/Graphs/ConsG.cpp +10 -10
- package/lib/Graphs/ICFG.cpp +1 -1
- package/lib/Graphs/IRGraph.cpp +2 -2
- package/lib/Graphs/SVFG.cpp +5 -5
- package/lib/Graphs/SVFGOPT.cpp +5 -5
- package/lib/Graphs/VFG.cpp +1 -1
- package/lib/MSSA/MemRegion.cpp +2 -2
- package/lib/MSSA/MemSSA.cpp +4 -4
- package/lib/MSSA/SVFGBuilder.cpp +4 -4
- package/lib/MTA/FSMPTA.cpp +13 -13
- package/lib/MTA/MHP.cpp +1 -1
- package/lib/MTA/MTA.cpp +2 -2
- package/lib/MTA/MTAStat.cpp +1 -1
- package/lib/MTA/PCG.cpp +8 -2
- package/lib/MTA/TCT.cpp +2 -2
- package/lib/MemoryModel/PointerAnalysis.cpp +13 -13
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +13 -13
- package/lib/MemoryModel/PointsTo.cpp +1 -1
- package/lib/SABER/DoubleFreeChecker.cpp +1 -1
- package/lib/SABER/LeakChecker.cpp +1 -1
- package/lib/SABER/SaberCondAllocator.cpp +1 -1
- package/lib/SABER/SrcSnkDDA.cpp +5 -5
- package/lib/SVF-LLVM/CHGBuilder.cpp +1 -1
- package/lib/SVF-LLVM/DCHG.cpp +1 -1
- package/lib/SVF-LLVM/LLVMLoopAnalysis.cpp +2 -2
- package/lib/SVF-LLVM/LLVMModule.cpp +10 -4
- package/lib/SVF-LLVM/SVFIRBuilder.cpp +8 -8
- package/lib/SVF-LLVM/SymbolTableBuilder.cpp +5 -5
- package/lib/SVFIR/SVFIR.cpp +4 -4
- package/lib/SVFIR/SVFStatements.cpp +16 -16
- package/lib/SVFIR/SVFVariables.cpp +5 -5
- package/lib/SVFIR/SymbolTableInfo.cpp +6 -6
- package/lib/Util/NodeIDAllocator.cpp +9 -9
- package/lib/Util/Options.cpp +431 -412
- package/lib/Util/SVFStat.cpp +5 -5
- package/lib/Util/SVFUtil.cpp +1 -1
- package/lib/Util/Z3Expr.cpp +2 -2
- package/lib/WPA/Andersen.cpp +13 -13
- package/lib/WPA/AndersenSCD.cpp +3 -3
- package/lib/WPA/FlowSensitive.cpp +8 -8
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
- package/lib/WPA/WPAPass.cpp +10 -9
- package/package.json +1 -1
- package/tools/CFL/cfl.cpp +8 -14
- package/tools/DDA/dda.cpp +39 -29
- package/tools/Example/svf-ex.cpp +5 -8
- package/tools/MTA/LockResultValidator.cpp +2 -2
- package/tools/MTA/MTAAnnotator.cpp +5 -5
- package/tools/MTA/MTAResultValidator.cpp +8 -8
- package/tools/MTA/mta.cpp +5 -8
- package/tools/SABER/saber.cpp +23 -17
- package/tools/WPA/wpa.cpp +6 -9
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
6
|
+
<meta name="generator" content="Doxygen 1.8.13"/>
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
8
|
+
<title>Static Value-Flow Analysis: /home/runner/work/SVF/SVF/include/Util/CommandLine.h Source File</title>
|
|
9
|
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
10
|
+
<script type="text/javascript" src="jquery.js"></script>
|
|
11
|
+
<script type="text/javascript" src="dynsections.js"></script>
|
|
12
|
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
13
|
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
14
|
+
<script type="text/javascript" src="search/search.js"></script>
|
|
15
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
19
|
+
<div id="titlearea">
|
|
20
|
+
<table cellspacing="0" cellpadding="0">
|
|
21
|
+
<tbody>
|
|
22
|
+
<tr style="height: 56px;">
|
|
23
|
+
<td id="projectalign" style="padding-left: 0.5em;">
|
|
24
|
+
<div id="projectname">Static Value-Flow Analysis
|
|
25
|
+
</div>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
</tbody>
|
|
29
|
+
</table>
|
|
30
|
+
</div>
|
|
31
|
+
<!-- end header part -->
|
|
32
|
+
<!-- Generated by Doxygen 1.8.13 -->
|
|
33
|
+
<script type="text/javascript">
|
|
34
|
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
35
|
+
</script>
|
|
36
|
+
<script type="text/javascript" src="menudata.js"></script>
|
|
37
|
+
<script type="text/javascript" src="menu.js"></script>
|
|
38
|
+
<script type="text/javascript">
|
|
39
|
+
$(function() {
|
|
40
|
+
initMenu('',true,false,'search.php','Search');
|
|
41
|
+
$(document).ready(function() { init_search(); });
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
44
|
+
<div id="main-nav"></div>
|
|
45
|
+
<!-- window showing the filter options -->
|
|
46
|
+
<div id="MSearchSelectWindow"
|
|
47
|
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
48
|
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
49
|
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- iframe showing the search results (closed by default) -->
|
|
53
|
+
<div id="MSearchResultsWindow">
|
|
54
|
+
<iframe src="javascript:void(0)" frameborder="0"
|
|
55
|
+
name="MSearchResults" id="MSearchResults">
|
|
56
|
+
</iframe>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div id="nav-path" class="navpath">
|
|
60
|
+
<ul>
|
|
61
|
+
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_95e22971b5dbae2382075a3453e365b4.html">Util</a></li> </ul>
|
|
62
|
+
</div>
|
|
63
|
+
</div><!-- top -->
|
|
64
|
+
<div class="header">
|
|
65
|
+
<div class="headertitle">
|
|
66
|
+
<div class="title">CommandLine.h</div> </div>
|
|
67
|
+
</div><!--header-->
|
|
68
|
+
<div class="contents">
|
|
69
|
+
<a href="CommandLine_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="preprocessor">#ifndef COMMANDLINE_H_</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#define COMMANDLINE_H_</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include <algorithm></span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <cassert></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include <string></span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include <tuple></span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include <type_traits></span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <unordered_map></span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <unordered_set></span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <limits></span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <map></span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <vector></span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <cstdlib></span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <iostream></span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <sstream></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da"> 18</a></span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a>;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="classOptionBase.html"> 20</a></span> <span class="keyword">class </span><a class="code" href="classOptionBase.html">OptionBase</a></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classOptionBase.html#a0a048de2a9ea404cb6b6be6276e8f91e"> 24</a></span>  <span class="keyword">typedef</span> std::pair<std::string, std::string> <a class="code" href="classOptionBase.html#a0a048de2a9ea404cb6b6be6276e8f91e">PossibilityDescription</a>;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classOptionBase.html#adbecc317e1c8a157456c069ca0b4679c"> 25</a></span>  <span class="keyword">typedef</span> std::vector<std::pair<std::string, std::string>> <a class="code" href="classOptionBase.html#adbecc317e1c8a157456c069ca0b4679c">PossibilityDescriptions</a>;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d"> 30</a></span>  <span class="keyword">using</span> <a class="code" href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d">OptionPossibility</a> = std::tuple<T, std::string, std::string>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classOptionBase.html#ae99500409f218ce63d4dbce537884c7f"> 33</a></span>  <a class="code" href="classOptionBase.html#ae99500409f218ce63d4dbce537884c7f">OptionBase</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a>, <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  : <a class="code" href="classOptionBase.html">OptionBase</a>(name, description, {})</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classOptionBase.html#a3a30161a89e5dd22b3501b6a7de3eab4"> 38</a></span>  <a class="code" href="classOptionBase.html#a3a30161a89e5dd22b3501b6a7de3eab4">OptionBase</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a>, <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>, PossibilityDescriptions <a class="code" href="classOptionBase.html#aa6cc4a59e5801eff5d7dcdc0137e16a1">possibilityDescriptions</a>)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  : name(name), description(description), possibilityDescriptions(possibilityDescriptions)</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>  assert(name[0] != <span class="charliteral">'-'</span> && <span class="stringliteral">"OptionBase: name starts with '-'"</span>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  assert(!<a class="code" href="classOptionBase.html#ae446d8507843235d8fe71d32bc4bd04b">isHelpName</a>(name) && <span class="stringliteral">"OptionBase: reserved help name"</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  assert(<a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>().find(name) == <a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>().end() && <span class="stringliteral">"OptionBase: duplicate option"</span>);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="comment">// Types with empty names (i.e., OptionMultiple) can handle things themselves.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (!name.empty())</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// Standard name=value option.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>()[<a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a>] = <span class="keyword">this</span>;</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>  }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionBase.html#af20460d3ee3bcfbb036120339996efd8">parseAndSetValue</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> value) = 0;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classOptionBase.html#acd2a32f510c026154665f7d874f3f362"> 58</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionBase.html#acd2a32f510c026154665f7d874f3f362">isBool</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</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> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classOptionBase.html#ad6fe65a503048686686ea6ced35a2dfd"> 64</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionBase.html#ad6fe65a503048686686ea6ced35a2dfd">isMultiple</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> <span class="keyword">false</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="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionBase.html#a41b5697dffc86139fa9341210f7233d9">canSet</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5"> 75</a></span>  <span class="keyword">static</span> std::vector<std::string> <a class="code" href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">parseOptions</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[], <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>, <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> callFormat)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> usage = <a class="code" href="classOptionBase.html#a7dbcdc9ff8df95a2c5ca4bd0723a3965">buildUsage</a>(description, <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(argv[0]), callFormat);</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>  std::vector<std::string> positionalArguments;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i < argc; ++i)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> arg(argv[i]);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span> (arg.empty()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">if</span> (arg[0] != <span class="charliteral">'-'</span>)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="comment">// Positional argument. NOT a value to another argument because we</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="comment">// "skip" over evaluating those without the corresponding argument.</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  positionalArguments.push_back(arg);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">// Chop off '-'.</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  arg = arg.substr(1);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> argName;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> argValue;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <a class="code" href="classOptionBase.html">OptionBase</a> *opt = <span class="keyword">nullptr</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>  <span class="keywordtype">size_t</span> equalsSign = arg.find(<span class="charliteral">'='</span>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (equalsSign != std::string::npos)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// Argument has an equal sign, i.e. argName=argValue</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  argName = arg.substr(0, equalsSign);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">if</span> (<a class="code" href="classOptionBase.html#ae446d8507843235d8fe71d32bc4bd04b">isHelpName</a>(argName)) <a class="code" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">usageAndExit</a>(usage, <span class="keyword">false</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  opt = <a class="code" href="classOptionBase.html#abf205790830ba8c3bb7097701ca86a69">getOption</a>(argName);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span> (opt == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  std::cerr << <span class="stringliteral">"Unknown option: "</span> << argName << std::endl;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">usageAndExit</a>(usage, <span class="keyword">true</span>);</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> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  argValue = arg.substr(equalsSign + 1);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</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>  {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  argName = arg;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (<a class="code" href="classOptionBase.html#ae446d8507843235d8fe71d32bc4bd04b">isHelpName</a>(argName)) <a class="code" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">usageAndExit</a>(usage, <span class="keyword">false</span>);</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>  opt = <a class="code" href="classOptionBase.html#abf205790830ba8c3bb7097701ca86a69">getOption</a>(argName);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (opt == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  std::cerr << <span class="stringliteral">"Unknown option: "</span> << argName << std::endl;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">usageAndExit</a>(usage, <span class="keyword">true</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">// No equals sign means we may need next argument.</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">if</span> (opt-><a class="code" href="classOptionBase.html#acd2a32f510c026154665f7d874f3f362">isBool</a>())</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="comment">// Booleans do not accept -arg true/-arg false.</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">// They must be -arg=true/-arg=false.</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  argValue = <span class="stringliteral">"true"</span>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt-><a class="code" href="classOptionBase.html#ad6fe65a503048686686ea6ced35a2dfd">isMultiple</a>())</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="comment">// Name is the value and will be converted to an enum.</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  argValue = argName;</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i + 1 < argc)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// On iteration, we'll skip the value.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  ++i;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  argValue = <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(argv[i]);</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">else</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  std::cerr << <span class="stringliteral">"Expected value for: "</span> << argName << std::endl;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">usageAndExit</a>(usage, <span class="keyword">true</span>);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span> (!opt-><a class="code" href="classOptionBase.html#a41b5697dffc86139fa9341210f7233d9">canSet</a>())</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  std::cerr << <span class="stringliteral">"Unable to set: "</span> << argName << <span class="stringliteral">"; check for duplicates"</span> << std::endl;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">usageAndExit</a>(usage, <span class="keyword">true</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> </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordtype">bool</span> valueSet = opt-><a class="code" href="classOptionBase.html#af20460d3ee3bcfbb036120339996efd8">parseAndSetValue</a>(argValue);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (!valueSet)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  std::cerr << <span class="stringliteral">"Bad value for: "</span> << argName << std::endl;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">usageAndExit</a>(usage, <span class="keyword">true</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> positionalArguments;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classOptionBase.html#a7dbcdc9ff8df95a2c5ca4bd0723a3965"> 174</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a7dbcdc9ff8df95a2c5ca4bd0723a3965">buildUsage</a>(</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>, <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> argv0, <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> callFormat</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  )</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="comment">// Determine longest option to split into two columns: options and descriptions.</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordtype">unsigned</span> longest = 0;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<std::string, OptionBase *> nopt : <a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>())</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a> = std::get<0>(nopt);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">const</span> <a class="code" href="classOptionBase.html">OptionBase</a> *option = std::get<1>(nopt);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span> (option->isMultiple())</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">// For Multiple, description goes in left column.</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (option->description.length() > longest) longest = option-><a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>.length();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">else</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>  <span class="keywordflow">if</span> (name.length() > longest) longest = name.length();</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> PossibilityDescription &pd : option->possibilityDescriptions)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> possibility = std::get<0>(pd);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (possibility.length() + 3 > longest) longest = possibility.length() + 3;</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>  }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  std::stringstream ss;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  ss << description << std::endl << std::endl;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  ss << <span class="stringliteral">"USAGE:"</span> << std::endl;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  ss << <span class="stringliteral">" "</span> << argv0 << <span class="stringliteral">" "</span> << callFormat << std::endl;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  ss << std::endl;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  ss << <span class="stringliteral">"OPTIONS:"</span> << std::endl;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="comment">// Required as we have OptionMultiples doing a many-to-one in options.</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  std::unordered_set<const OptionBase *> handled;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<std::string, OptionBase *> nopt : <a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a> = std::get<0>(nopt);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keyword">const</span> <a class="code" href="classOptionBase.html">OptionBase</a> *option = std::get<1>(nopt);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">if</span> (handled.find(option) != handled.end()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  handled.insert(option);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">if</span> (option->isMultiple())</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="comment">// description</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// -name1 - description</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="comment">// -name2 - description</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// ...</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  ss << <span class="stringliteral">" "</span> << option-><a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a> << std::endl;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> PossibilityDescription &pd : option->possibilityDescriptions)</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">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> possibility = std::get<0>(pd);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> description = std::get<1>(pd);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  ss << <span class="stringliteral">" -"</span> << possibility << <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(longest - possibility.length() + 2, <span class="charliteral">' '</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  ss << <span class="stringliteral">"- "</span> << description << std::endl;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="comment">// name - description</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="comment">// or</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="comment">// name - description</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// =opt1 - description</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// =opt2 - description</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// ...</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  ss << <span class="stringliteral">" -"</span> << name << <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(longest - name.length() + 2, <span class="charliteral">' '</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  ss << <span class="stringliteral">"- "</span> << option->description << std::endl;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> PossibilityDescription &pd : option->possibilityDescriptions)</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="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> possibility = std::get<0>(pd);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> description = std::get<1>(pd);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  ss << <span class="stringliteral">" ="</span> << possibility << <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(longest - possibility.length() + 2, <span class="charliteral">' '</span>);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  ss << <span class="stringliteral">"- "</span> << description << std::endl;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</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">// Help message.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  ss << std::endl;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  ss << <span class="stringliteral">" -help"</span> << <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(longest - 4 + 2, <span class="charliteral">' '</span>) << <span class="stringliteral">"- show usage and exit"</span> << std::endl;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  ss << <span class="stringliteral">" -h"</span> << <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(longest - 1 + 2, <span class="charliteral">' '</span>) << <span class="stringliteral">"- show usage and exit"</span> << std::endl;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="comment">// How to set boolean options.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  ss << std::endl;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  ss << <span class="stringliteral">"Note: for boolean options, -name true and -name false are invalid."</span> << std::endl;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  ss << <span class="stringliteral">" Use -name, -name=true, or -name=false."</span> << std::endl;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classOptionBase.html#abf205790830ba8c3bb7097701ca86a69"> 269</a></span>  <span class="keyword">static</span> <a class="code" href="classOptionBase.html">OptionBase</a> *<a class="code" href="classOptionBase.html#abf205790830ba8c3bb7097701ca86a69">getOption</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> optName)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keyword">auto</span> optIt = <a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>().find(optName);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (optIt == <a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>().end()) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">else</span> <span class="keywordflow">return</span> optIt->second;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0"> 277</a></span>  <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">usageAndExit</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> usage, <span class="keywordtype">bool</span> <a class="code" href="structerror.html">error</a>)</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">if</span> (error) std::cerr << usage;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">else</span> std::cout << usage;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  std::exit(error ? 1 : 0);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classOptionBase.html#ae446d8507843235d8fe71d32bc4bd04b"> 285</a></span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionBase.html#ae446d8507843235d8fe71d32bc4bd04b">isHelpName</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a>)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keyword">static</span> std::vector<std::string> helpNames = {<span class="stringliteral">"help"</span>, <span class="stringliteral">"h"</span>, <span class="stringliteral">"-help"</span>};</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">return</span> std::find(helpNames.begin(), helpNames.end(), <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a>) != helpNames.end();</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"> 291</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="comment">// Return the name/description part of OptionsPossibilities (second and third fields).</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classOptionBase.html#a21e8ccc08eef254ceee53185a717301d"> 294</a></span>  <span class="keyword">static</span> PossibilityDescriptions <a class="code" href="classOptionBase.html#a21e8ccc08eef254ceee53185a717301d">extractPossibilityDescriptions</a>(<span class="keyword">const</span> std::vector<<a class="code" href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d">OptionPossibility<T></a>> possibilities)</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>  PossibilityDescriptions <a class="code" href="classOptionBase.html#aa6cc4a59e5801eff5d7dcdc0137e16a1">possibilityDescriptions</a>;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d">OptionPossibility<T></a> &op : possibilities)</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  {</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  possibilityDescriptions.push_back(std::make_pair(std::get<1>(op), std::get<2>(op)));</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> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">return</span> <a class="code" href="classOptionBase.html#aa6cc4a59e5801eff5d7dcdc0137e16a1">possibilityDescriptions</a>;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c"> 307</a></span>  <span class="keyword">static</span> std::map<std::string, OptionBase *> &<a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>(<span class="keywordtype">void</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"> 309</span>  <span class="comment">// Not static member to avoid initialisation order problems.</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">static</span> std::map<std::string, OptionBase *> options;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">return</span> options;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc"> 316</a></span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a>;</div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b"> 317</a></span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>;</div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="classOptionBase.html#aa6cc4a59e5801eff5d7dcdc0137e16a1"> 319</a></span>  PossibilityDescriptions <a class="code" href="classOptionBase.html#aa6cc4a59e5801eff5d7dcdc0137e16a1">possibilityDescriptions</a>;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> };</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classOption.html"> 325</a></span> <span class="keyword">class </span><a class="code" href="classOption.html">Option</a> : <span class="keyword">public</span> <a class="code" href="classOptionBase.html">OptionBase</a></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classOption.html#a479f07d7e2424931ea23e905a88f9c57"> 328</a></span>  <a class="code" href="classOption.html#a479f07d7e2424931ea23e905a88f9c57">Option</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a>, <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>, T init)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  : <a class="code" href="classOptionBase.html">OptionBase</a>(name, description), isExplicitlySet(<a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a>), value(init)</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  assert(!name.empty() && <span class="stringliteral">"Option: empty option name given"</span>);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div><div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="classOption.html#a25507245c3b4b8d2d52ab069d756bc31"> 334</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOption.html#a25507245c3b4b8d2d52ab069d756bc31">canSet</a>(<span class="keywordtype">void</span>)<span class="keyword"> const override</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="comment">// Don't allow duplicates.</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> !isExplicitlySet;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classOption.html#a4bce0f38bb5ae80e3ce435e736df6f50"> 340</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOption.html#a4bce0f38bb5ae80e3ce435e736df6f50">parseAndSetValue</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s)<span class="keyword"> override</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  isExplicitlySet = fromString(s, value);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span> isExplicitlySet;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="classOption.html#a910cf3c0ac5d45ee169cb8750898ea0b"> 346</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOption.html#a910cf3c0ac5d45ee169cb8750898ea0b">isBool</a>(<span class="keywordtype">void</span>)<span class="keyword"> const override</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">return</span> std::is_same<T, bool>::value;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classOption.html#ab40684f5ece904e9b81180ca1012b0b6"> 351</a></span>  <span class="keywordtype">void</span> <a class="code" href="classOption.html#ab40684f5ece904e9b81180ca1012b0b6">setValue</a>(T v)</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  value = v;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="classOption.html#a03dd304d717f642cd3b809c0233f876c"> 356</a></span>  T <a class="code" href="classOption.html#a03dd304d717f642cd3b809c0233f876c">operator()</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">return</span> value;</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> </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="comment">// Convert string to boolean, returning whether we succeeded.</span></div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classOption.html#abcd65f7f3f269cba1456455980be8322"> 363</a></span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classOption.html#abcd65f7f3f269cba1456455980be8322">fromString</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s, <span class="keywordtype">bool</span> &value)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">if</span> (s == <span class="stringliteral">"true"</span>) value = <span class="keyword">true</span>;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (s == <span class="stringliteral">"false"</span>) value = <span class="keyword">false</span>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="comment">// Convert string to string, always succeeds.</span></div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="classOption.html#a90cb730780483d0b45378ffbab1b7226"> 372</a></span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classOption.html#a90cb730780483d0b45378ffbab1b7226">fromString</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s, <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &value)</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>  value = s;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="comment">// Convert string to u32_t, returning whether we succeeded.</span></div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classOption.html#a40a506940beb76487183260d6c73eabf"> 379</a></span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classOption.html#a40a506940beb76487183260d6c73eabf">fromString</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s, <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> &value)</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>  <span class="comment">// We won't allow anything except [0-9]+.</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">if</span> (s.empty()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">for</span> (<span class="keywordtype">char</span> c : s)</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="keywordflow">if</span> (!(c >= <span class="charliteral">'0'</span> && c <= <span class="charliteral">'9'</span>)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</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> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="comment">// Use strtoul because we're not using exceptions.</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  assert(<span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) >= <span class="keyword">sizeof</span>(<a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a>));</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sv = std::strtoul(s.c_str(), <span class="keyword">nullptr</span>, 10);</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>  <span class="comment">// Out of range according to strtoul, or according to us compared to u32_t.</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">if</span> (errno == ERANGE || sv > std::numeric_limits<u32_t>::max()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  value = sv;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</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="keyword">private</span>:</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classOption.html#a980a99e59afae6419a9b15f7606d83dc"> 399</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classOption.html#a980a99e59afae6419a9b15f7606d83dc">isExplicitlySet</a>;</div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classOption.html#a067413be0c747358947c539a4179d489"> 400</a></span>  T <a class="code" href="classOption.html#a067413be0c747358947c539a4179d489">value</a>;</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> </div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="classOptionMap.html"> 406</a></span> <span class="keyword">class </span><a class="code" href="classOptionMap.html">OptionMap</a> : <span class="keyword">public</span> <a class="code" href="classOptionBase.html">OptionBase</a></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> <span class="keyword">public</span>:</div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classOptionMap.html#a6a91ecc488c6cc5e82e9faf674258644"> 409</a></span>  <span class="keyword">typedef</span> std::vector<OptionPossibility<T>> <a class="code" href="classOptionMap.html#a6a91ecc488c6cc5e82e9faf674258644">OptionPossibilities</a>;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classOptionMap.html#aa01d9dfa4aa1808c6d23fa900bbfc77c"> 411</a></span>  <a class="code" href="classOptionMap.html#aa01d9dfa4aa1808c6d23fa900bbfc77c">OptionMap</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">name</a>, <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>, T init, OptionPossibilities possibilities)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  : <a class="code" href="classOptionBase.html">OptionBase</a>(name, description, <a class="code" href="classOptionBase.html#a21e8ccc08eef254ceee53185a717301d">extractPossibilityDescriptions</a>(possibilities)),</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  isExplicitlySet(<a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a>), value(init), possibilities(possibilities)</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>  assert(!name.empty() && <span class="stringliteral">"OptionMap: empty option name given"</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> </div><div class="line"><a name="l00418"></a><span class="lineno"><a class="line" href="classOptionMap.html#a9fe150111f4ef83a91c5a1a01878ffa3"> 418</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionMap.html#a9fe150111f4ef83a91c5a1a01878ffa3">canSet</a>(<span class="keywordtype">void</span>)<span class="keyword"> const override</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">return</span> !isExplicitlySet;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00423"></a><span class="lineno"><a class="line" href="classOptionMap.html#a80523ee22ddb28f5837ad3fb07fd7dd5"> 423</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionMap.html#a80523ee22ddb28f5837ad3fb07fd7dd5">parseAndSetValue</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s)<span class="keyword"> override</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d">OptionPossibility<T></a> &op : possibilities)</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="comment">// Check if the given string is a valid one.</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">if</span> (s == std::get<1>(op))</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>  <span class="comment">// What that string maps to.</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  value = std::get<0>(op);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  isExplicitlySet = <span class="keyword">true</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">return</span> isExplicitlySet;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div><div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="classOptionMap.html#a12951965815bfaf1c5b3b026c6c4fb96"> 440</a></span>  T <a class="code" href="classOptionMap.html#a12951965815bfaf1c5b3b026c6c4fb96">operator()</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">return</span> value;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  }</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> <span class="keyword">private</span>:</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="classOptionMap.html#a9efba3b88013aa1745f47ab42d71c726"> 446</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classOptionMap.html#a9efba3b88013aa1745f47ab42d71c726">isExplicitlySet</a>;</div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classOptionMap.html#a76d2f6244b1d77932e07ca0c2a3afb57"> 447</a></span>  T <a class="code" href="classOptionMap.html#a76d2f6244b1d77932e07ca0c2a3afb57">value</a>;</div><div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="classOptionMap.html#a0e39650a4340e7ff4f214bc4223575eb"> 448</a></span>  OptionPossibilities <a class="code" href="classOptionMap.html#a0e39650a4340e7ff4f214bc4223575eb">possibilities</a>;</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> </div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="classOptionMultiple.html"> 454</a></span> <span class="keyword">class </span><a class="code" href="classOptionMultiple.html">OptionMultiple</a> : <span class="keyword">public</span> <a class="code" href="classOptionBase.html">OptionBase</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"> 456</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#a9513bc7ce4ade85cd16eccce9537887e"> 457</a></span>  <span class="keyword">typedef</span> std::vector<OptionPossibility<T>> <a class="code" href="classOptionMultiple.html#a9513bc7ce4ade85cd16eccce9537887e">OptionPossibilities</a>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#a00a2b17a8a0fefba400bc401f4392ed0"> 459</a></span>  <a class="code" href="classOptionMultiple.html#a00a2b17a8a0fefba400bc401f4392ed0">OptionMultiple</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">description</a>, OptionPossibilities possibilities)</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  : <a class="code" href="classOptionBase.html">OptionBase</a>(<span class="stringliteral">""</span>, description, <a class="code" href="classOptionBase.html#a21e8ccc08eef254ceee53185a717301d">extractPossibilityDescriptions</a>(possibilities)), possibilities(possibilities)</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d">OptionPossibility<T></a> &op : possibilities)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  optionValues[std::get<0>(op)] = <span class="keyword">false</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d">OptionPossibility<T></a> &op : possibilities)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> possibilityName = std::get<1>(op);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">getOptionsMap</a>()[possibilityName] = <span class="keyword">this</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"> 472</span>  }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div><div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#aa582e95f6546ffd2fc8420699967bca9"> 474</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionMultiple.html#aa582e95f6546ffd2fc8420699967bca9">canSet</a>(<span class="keywordtype">void</span>)<span class="keyword"> const override</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</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> </div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#af175c4dde2e877dbf52eb20bd836615e"> 479</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionMultiple.html#af175c4dde2e877dbf52eb20bd836615e">parseAndSetValue</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s)<span class="keyword"> override</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="comment">// Like in OptionMap basically, except we can have many values.</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d">OptionPossibility<T></a> &op : possibilities)</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">if</span> (s == std::get<1>(op))</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  optionValues[std::get<0>(op)] = <span class="keyword">true</span>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div><div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#aebfc1b172ccde004333d9af7248dca4e"> 494</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classOptionMultiple.html#aebfc1b172ccde004333d9af7248dca4e">isMultiple</a>(<span class="keywordtype">void</span>)<span class="keyword"> const override</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="l00500"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#a6de3b01c7773ea6fddf84cd57e7401f8"> 500</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classOptionMultiple.html#a6de3b01c7773ea6fddf84cd57e7401f8">nothingSet</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<T, bool> tb : optionValues)</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">if</span> (tb.second) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#af3ce2d981843996c5e47de2918d1f569"> 511</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classOptionMultiple.html#af3ce2d981843996c5e47de2918d1f569">operator()</a>(<span class="keyword">const</span> T v)<span class="keyword"> const</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keyword">typename</span> std::unordered_map<T, bool>::const_iterator ovIt = optionValues.find(v);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="comment">// TODO: disabled as we check for "invalid" values in some places.</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">// assert(ovIt != optionValues.end() && "OptionMultiple: bad value checked");</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">if</span> (ovIt == optionValues.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="keywordflow">return</span> ovIt->second;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#a037e34107c423615f1ba0c3fdab04b1f"> 523</a></span>  std::unordered_map<T, bool> <a class="code" href="classOptionMultiple.html#a037e34107c423615f1ba0c3fdab04b1f">optionValues</a>;</div><div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="classOptionMultiple.html#aec251294a810d232e1f352a40126d82a"> 524</a></span>  OptionPossibilities <a class="code" href="classOptionMultiple.html#aec251294a810d232e1f352a40126d82a">possibilities</a>;</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> </div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor">#endif </span><span class="comment">/* COMMANDLINE_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classOption_html_abcd65f7f3f269cba1456455980be8322"><div class="ttname"><a href="classOption.html#abcd65f7f3f269cba1456455980be8322">Option::fromString</a></div><div class="ttdeci">static bool fromString(const std::string s, bool &value)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00363">CommandLine.h:363</a></div></div>
|
|
70
|
+
<div class="ttc" id="classOptionBase_html_adbecc317e1c8a157456c069ca0b4679c"><div class="ttname"><a href="classOptionBase.html#adbecc317e1c8a157456c069ca0b4679c">OptionBase::PossibilityDescriptions</a></div><div class="ttdeci">std::vector< std::pair< std::string, std::string > > PossibilityDescriptions</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00025">CommandLine.h:25</a></div></div>
|
|
71
|
+
<div class="ttc" id="classOptionMultiple_html_aec251294a810d232e1f352a40126d82a"><div class="ttname"><a href="classOptionMultiple.html#aec251294a810d232e1f352a40126d82a">OptionMultiple::possibilities</a></div><div class="ttdeci">OptionPossibilities possibilities</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00524">CommandLine.h:524</a></div></div>
|
|
72
|
+
<div class="ttc" id="classOptionBase_html_aa6cc4a59e5801eff5d7dcdc0137e16a1"><div class="ttname"><a href="classOptionBase.html#aa6cc4a59e5801eff5d7dcdc0137e16a1">OptionBase::possibilityDescriptions</a></div><div class="ttdeci">PossibilityDescriptions possibilityDescriptions</div><div class="ttdoc">For when we have possibilities like in an OptionMap. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00319">CommandLine.h:319</a></div></div>
|
|
73
|
+
<div class="ttc" id="classOption_html_a25507245c3b4b8d2d52ab069d756bc31"><div class="ttname"><a href="classOption.html#a25507245c3b4b8d2d52ab069d756bc31">Option::canSet</a></div><div class="ttdeci">virtual bool canSet(void) const override</div><div class="ttdoc">Can this option be set? </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00334">CommandLine.h:334</a></div></div>
|
|
74
|
+
<div class="ttc" id="classOption_html"><div class="ttname"><a href="classOption.html">Option</a></div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00325">CommandLine.h:325</a></div></div>
|
|
75
|
+
<div class="ttc" id="classOptionMultiple_html_af175c4dde2e877dbf52eb20bd836615e"><div class="ttname"><a href="classOptionMultiple.html#af175c4dde2e877dbf52eb20bd836615e">OptionMultiple::parseAndSetValue</a></div><div class="ttdeci">virtual bool parseAndSetValue(const std::string s) override</div><div class="ttdoc">From a given string, set the value of this option. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00479">CommandLine.h:479</a></div></div>
|
|
76
|
+
<div class="ttc" id="classOptionBase_html_ad6fe65a503048686686ea6ced35a2dfd"><div class="ttname"><a href="classOptionBase.html#ad6fe65a503048686686ea6ced35a2dfd">OptionBase::isMultiple</a></div><div class="ttdeci">virtual bool isMultiple(void) const</div><div class="ttdoc">Whether this option is an OptionMultiple. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00064">CommandLine.h:64</a></div></div>
|
|
77
|
+
<div class="ttc" id="classOptionBase_html_ac68017dd45d05c5fe26ae04bb58f903c"><div class="ttname"><a href="classOptionBase.html#ac68017dd45d05c5fe26ae04bb58f903c">OptionBase::getOptionsMap</a></div><div class="ttdeci">static std::map< std::string, OptionBase * > & getOptionsMap(void)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00307">CommandLine.h:307</a></div></div>
|
|
78
|
+
<div class="ttc" id="classOptionMap_html_a80523ee22ddb28f5837ad3fb07fd7dd5"><div class="ttname"><a href="classOptionMap.html#a80523ee22ddb28f5837ad3fb07fd7dd5">OptionMap::parseAndSetValue</a></div><div class="ttdeci">virtual bool parseAndSetValue(const std::string s) override</div><div class="ttdoc">From a given string, set the value of this option. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00423">CommandLine.h:423</a></div></div>
|
|
79
|
+
<div class="ttc" id="classOption_html_a03dd304d717f642cd3b809c0233f876c"><div class="ttname"><a href="classOption.html#a03dd304d717f642cd3b809c0233f876c">Option::operator()</a></div><div class="ttdeci">T operator()(void) const</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00356">CommandLine.h:356</a></div></div>
|
|
80
|
+
<div class="ttc" id="classOptionMultiple_html_a6de3b01c7773ea6fddf84cd57e7401f8"><div class="ttname"><a href="classOptionMultiple.html#a6de3b01c7773ea6fddf84cd57e7401f8">OptionMultiple::nothingSet</a></div><div class="ttdeci">bool nothingSet(void) const</div><div class="ttdoc">If the bitset is empty. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00500">CommandLine.h:500</a></div></div>
|
|
81
|
+
<div class="ttc" id="classOptionBase_html_ae446d8507843235d8fe71d32bc4bd04b"><div class="ttname"><a href="classOptionBase.html#ae446d8507843235d8fe71d32bc4bd04b">OptionBase::isHelpName</a></div><div class="ttdeci">static bool isHelpName(const std::string name)</div><div class="ttdoc">Returns whether name is one of the reserved help options. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00285">CommandLine.h:285</a></div></div>
|
|
82
|
+
<div class="ttc" id="classOptionBase_html_a8fbb1cde9e12a099617c8e8298424b5b"><div class="ttname"><a href="classOptionBase.html#a8fbb1cde9e12a099617c8e8298424b5b">OptionBase::description</a></div><div class="ttdeci">std::string description</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00317">CommandLine.h:317</a></div></div>
|
|
83
|
+
<div class="ttc" id="classOption_html_a90cb730780483d0b45378ffbab1b7226"><div class="ttname"><a href="classOption.html#a90cb730780483d0b45378ffbab1b7226">Option::fromString</a></div><div class="ttdeci">static bool fromString(const std::string s, std::string &value)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00372">CommandLine.h:372</a></div></div>
|
|
84
|
+
<div class="ttc" id="cJSON_8cpp_html_a65e9886d74aaee76545e83dd09011727"><div class="ttname"><a href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a></div><div class="ttdeci">#define false</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00070">cJSON.cpp:70</a></div></div>
|
|
85
|
+
<div class="ttc" id="classOptionMap_html_a12951965815bfaf1c5b3b026c6c4fb96"><div class="ttname"><a href="classOptionMap.html#a12951965815bfaf1c5b3b026c6c4fb96">OptionMap::operator()</a></div><div class="ttdeci">T operator()(void) const</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00440">CommandLine.h:440</a></div></div>
|
|
86
|
+
<div class="ttc" id="classOptionMultiple_html_aa582e95f6546ffd2fc8420699967bca9"><div class="ttname"><a href="classOptionMultiple.html#aa582e95f6546ffd2fc8420699967bca9">OptionMultiple::canSet</a></div><div class="ttdeci">virtual bool canSet(void) const override</div><div class="ttdoc">Can this option be set? </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00474">CommandLine.h:474</a></div></div>
|
|
87
|
+
<div class="ttc" id="classOptionBase_html_ac6df21066e0848e26a718d81a25e2bb0"><div class="ttname"><a href="classOptionBase.html#ac6df21066e0848e26a718d81a25e2bb0">OptionBase::usageAndExit</a></div><div class="ttdeci">static void usageAndExit(const std::string usage, bool error)</div><div class="ttdoc">Print usage and exit. If error is set, print to stderr and exits with code 1. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00277">CommandLine.h:277</a></div></div>
|
|
88
|
+
<div class="ttc" id="classOptionBase_html_a494ea256d6484e4f7e8751de499889fc"><div class="ttname"><a href="classOptionBase.html#a494ea256d6484e4f7e8751de499889fc">OptionBase::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00316">CommandLine.h:316</a></div></div>
|
|
89
|
+
<div class="ttc" id="classOption_html_a4bce0f38bb5ae80e3ce435e736df6f50"><div class="ttname"><a href="classOption.html#a4bce0f38bb5ae80e3ce435e736df6f50">Option::parseAndSetValue</a></div><div class="ttdeci">virtual bool parseAndSetValue(const std::string s) override</div><div class="ttdoc">From a given string, set the value of this option. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00340">CommandLine.h:340</a></div></div>
|
|
90
|
+
<div class="ttc" id="classOptionMultiple_html_af3ce2d981843996c5e47de2918d1f569"><div class="ttname"><a href="classOptionMultiple.html#af3ce2d981843996c5e47de2918d1f569">OptionMultiple::operator()</a></div><div class="ttdeci">bool operator()(const T v) const</div><div class="ttdoc">Returns whether the value v had been set as an option. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00511">CommandLine.h:511</a></div></div>
|
|
91
|
+
<div class="ttc" id="classOptionMap_html_aa01d9dfa4aa1808c6d23fa900bbfc77c"><div class="ttname"><a href="classOptionMap.html#aa01d9dfa4aa1808c6d23fa900bbfc77c">OptionMap::OptionMap</a></div><div class="ttdeci">OptionMap(std::string name, std::string description, T init, OptionPossibilities possibilities)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00411">CommandLine.h:411</a></div></div>
|
|
92
|
+
<div class="ttc" id="classOptionBase_html_af20460d3ee3bcfbb036120339996efd8"><div class="ttname"><a href="classOptionBase.html#af20460d3ee3bcfbb036120339996efd8">OptionBase::parseAndSetValue</a></div><div class="ttdeci">virtual bool parseAndSetValue(const std::string value)=0</div><div class="ttdoc">From a given string, set the value of this option. </div></div>
|
|
93
|
+
<div class="ttc" id="classOption_html_a980a99e59afae6419a9b15f7606d83dc"><div class="ttname"><a href="classOption.html#a980a99e59afae6419a9b15f7606d83dc">Option::isExplicitlySet</a></div><div class="ttdeci">bool isExplicitlySet</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00399">CommandLine.h:399</a></div></div>
|
|
94
|
+
<div class="ttc" id="classOptionBase_html_a3a30161a89e5dd22b3501b6a7de3eab4"><div class="ttname"><a href="classOptionBase.html#a3a30161a89e5dd22b3501b6a7de3eab4">OptionBase::OptionBase</a></div><div class="ttdeci">OptionBase(std::string name, std::string description, PossibilityDescriptions possibilityDescriptions)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00038">CommandLine.h:38</a></div></div>
|
|
95
|
+
<div class="ttc" id="classOptionBase_html_a0a048de2a9ea404cb6b6be6276e8f91e"><div class="ttname"><a href="classOptionBase.html#a0a048de2a9ea404cb6b6be6276e8f91e">OptionBase::PossibilityDescription</a></div><div class="ttdeci">std::pair< std::string, std::string > PossibilityDescription</div><div class="ttdoc">Name/description pairs. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00024">CommandLine.h:24</a></div></div>
|
|
96
|
+
<div class="ttc" id="classOptionBase_html_a8cc760078ccd614db2190d0f87f5da0d"><div class="ttname"><a href="classOptionBase.html#a8cc760078ccd614db2190d0f87f5da0d">OptionBase::OptionPossibility</a></div><div class="ttdeci">std::tuple< T, std::string, std::string > OptionPossibility</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00030">CommandLine.h:30</a></div></div>
|
|
97
|
+
<div class="ttc" id="structerror_html"><div class="ttname"><a href="structerror.html">error</a></div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00088">cJSON.cpp:88</a></div></div>
|
|
98
|
+
<div class="ttc" id="classOption_html_ab40684f5ece904e9b81180ca1012b0b6"><div class="ttname"><a href="classOption.html#ab40684f5ece904e9b81180ca1012b0b6">Option::setValue</a></div><div class="ttdeci">void setValue(T v)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00351">CommandLine.h:351</a></div></div>
|
|
99
|
+
<div class="ttc" id="classOption_html_a40a506940beb76487183260d6c73eabf"><div class="ttname"><a href="classOption.html#a40a506940beb76487183260d6c73eabf">Option::fromString</a></div><div class="ttdeci">static bool fromString(const std::string s, u32_t &value)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00379">CommandLine.h:379</a></div></div>
|
|
100
|
+
<div class="ttc" id="classOptionMultiple_html_aebfc1b172ccde004333d9af7248dca4e"><div class="ttname"><a href="classOptionMultiple.html#aebfc1b172ccde004333d9af7248dca4e">OptionMultiple::isMultiple</a></div><div class="ttdeci">virtual bool isMultiple(void) const override</div><div class="ttdoc">Whether this option is an OptionMultiple. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00494">CommandLine.h:494</a></div></div>
|
|
101
|
+
<div class="ttc" id="classOptionMap_html"><div class="ttname"><a href="classOptionMap.html">OptionMap</a></div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00406">CommandLine.h:406</a></div></div>
|
|
102
|
+
<div class="ttc" id="classOptionBase_html_a41b5697dffc86139fa9341210f7233d9"><div class="ttname"><a href="classOptionBase.html#a41b5697dffc86139fa9341210f7233d9">OptionBase::canSet</a></div><div class="ttdeci">virtual bool canSet(void) const =0</div><div class="ttdoc">Can this option be set? </div></div>
|
|
103
|
+
<div class="ttc" id="classOption_html_a067413be0c747358947c539a4179d489"><div class="ttname"><a href="classOption.html#a067413be0c747358947c539a4179d489">Option::value</a></div><div class="ttdeci">T value</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00400">CommandLine.h:400</a></div></div>
|
|
104
|
+
<div class="ttc" id="classOptionBase_html"><div class="ttname"><a href="classOptionBase.html">OptionBase</a></div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00020">CommandLine.h:20</a></div></div>
|
|
105
|
+
<div class="ttc" id="classOption_html_a479f07d7e2424931ea23e905a88f9c57"><div class="ttname"><a href="classOption.html#a479f07d7e2424931ea23e905a88f9c57">Option::Option</a></div><div class="ttdeci">Option(std::string name, std::string description, T init)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00328">CommandLine.h:328</a></div></div>
|
|
106
|
+
<div class="ttc" id="classOption_html_a910cf3c0ac5d45ee169cb8750898ea0b"><div class="ttname"><a href="classOption.html#a910cf3c0ac5d45ee169cb8750898ea0b">Option::isBool</a></div><div class="ttdeci">virtual bool isBool(void) const override</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00346">CommandLine.h:346</a></div></div>
|
|
107
|
+
<div class="ttc" id="classOptionBase_html_abf205790830ba8c3bb7097701ca86a69"><div class="ttname"><a href="classOptionBase.html#abf205790830ba8c3bb7097701ca86a69">OptionBase::getOption</a></div><div class="ttdeci">static OptionBase * getOption(const std::string optName)</div><div class="ttdoc">Find option based on name in options map. Returns nullptr if not found. </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00269">CommandLine.h:269</a></div></div>
|
|
108
|
+
<div class="ttc" id="classOptionMap_html_a6a91ecc488c6cc5e82e9faf674258644"><div class="ttname"><a href="classOptionMap.html#a6a91ecc488c6cc5e82e9faf674258644">OptionMap::OptionPossibilities</a></div><div class="ttdeci">std::vector< OptionPossibility< T > > OptionPossibilities</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00409">CommandLine.h:409</a></div></div>
|
|
109
|
+
<div class="ttc" id="classOptionMap_html_a0e39650a4340e7ff4f214bc4223575eb"><div class="ttname"><a href="classOptionMap.html#a0e39650a4340e7ff4f214bc4223575eb">OptionMap::possibilities</a></div><div class="ttdeci">OptionPossibilities possibilities</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00448">CommandLine.h:448</a></div></div>
|
|
110
|
+
<div class="ttc" id="classOptionMultiple_html"><div class="ttname"><a href="classOptionMultiple.html">OptionMultiple</a></div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00454">CommandLine.h:454</a></div></div>
|
|
111
|
+
<div class="ttc" id="classOptionBase_html_ae99500409f218ce63d4dbce537884c7f"><div class="ttname"><a href="classOptionBase.html#ae99500409f218ce63d4dbce537884c7f">OptionBase::OptionBase</a></div><div class="ttdeci">OptionBase(std::string name, std::string description)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00033">CommandLine.h:33</a></div></div>
|
|
112
|
+
<div class="ttc" id="CommandLine_8h_html_a2429346d37bd4c40889bd7c6d319d9da"><div class="ttname"><a href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00018">CommandLine.h:18</a></div></div>
|
|
113
|
+
<div class="ttc" id="classOptionMultiple_html_a9513bc7ce4ade85cd16eccce9537887e"><div class="ttname"><a href="classOptionMultiple.html#a9513bc7ce4ade85cd16eccce9537887e">OptionMultiple::OptionPossibilities</a></div><div class="ttdeci">std::vector< OptionPossibility< T > > OptionPossibilities</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00457">CommandLine.h:457</a></div></div>
|
|
114
|
+
<div class="ttc" id="classOptionBase_html_acd2a32f510c026154665f7d874f3f362"><div class="ttname"><a href="classOptionBase.html#acd2a32f510c026154665f7d874f3f362">OptionBase::isBool</a></div><div class="ttdeci">virtual bool isBool(void) const</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00058">CommandLine.h:58</a></div></div>
|
|
115
|
+
<div class="ttc" id="classOptionBase_html_a7dbcdc9ff8df95a2c5ca4bd0723a3965"><div class="ttname"><a href="classOptionBase.html#a7dbcdc9ff8df95a2c5ca4bd0723a3965">OptionBase::buildUsage</a></div><div class="ttdeci">static std::string buildUsage(const std::string description, const std::string argv0, const std::string callFormat)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00174">CommandLine.h:174</a></div></div>
|
|
116
|
+
<div class="ttc" id="classOptionMultiple_html_a037e34107c423615f1ba0c3fdab04b1f"><div class="ttname"><a href="classOptionMultiple.html#a037e34107c423615f1ba0c3fdab04b1f">OptionMultiple::optionValues</a></div><div class="ttdeci">std::unordered_map< T, bool > optionValues</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00523">CommandLine.h:523</a></div></div>
|
|
117
|
+
<div class="ttc" id="classOptionMap_html_a76d2f6244b1d77932e07ca0c2a3afb57"><div class="ttname"><a href="classOptionMap.html#a76d2f6244b1d77932e07ca0c2a3afb57">OptionMap::value</a></div><div class="ttdeci">T value</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00447">CommandLine.h:447</a></div></div>
|
|
118
|
+
<div class="ttc" id="classOptionBase_html_a4fb6c6e4a1754d702c6c1730f54457e5"><div class="ttname"><a href="classOptionBase.html#a4fb6c6e4a1754d702c6c1730f54457e5">OptionBase::parseOptions</a></div><div class="ttdeci">static std::vector< std::string > parseOptions(int argc, char *argv[], std::string description, std::string callFormat)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00075">CommandLine.h:75</a></div></div>
|
|
119
|
+
<div class="ttc" id="classOptionMap_html_a9fe150111f4ef83a91c5a1a01878ffa3"><div class="ttname"><a href="classOptionMap.html#a9fe150111f4ef83a91c5a1a01878ffa3">OptionMap::canSet</a></div><div class="ttdeci">virtual bool canSet(void) const override</div><div class="ttdoc">Can this option be set? </div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00418">CommandLine.h:418</a></div></div>
|
|
120
|
+
<div class="ttc" id="classOptionMultiple_html_a00a2b17a8a0fefba400bc401f4392ed0"><div class="ttname"><a href="classOptionMultiple.html#a00a2b17a8a0fefba400bc401f4392ed0">OptionMultiple::OptionMultiple</a></div><div class="ttdeci">OptionMultiple(std::string description, OptionPossibilities possibilities)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00459">CommandLine.h:459</a></div></div>
|
|
121
|
+
<div class="ttc" id="classOptionMap_html_a9efba3b88013aa1745f47ab42d71c726"><div class="ttname"><a href="classOptionMap.html#a9efba3b88013aa1745f47ab42d71c726">OptionMap::isExplicitlySet</a></div><div class="ttdeci">bool isExplicitlySet</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00446">CommandLine.h:446</a></div></div>
|
|
122
|
+
<div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
123
|
+
<div class="ttc" id="classOptionBase_html_a21e8ccc08eef254ceee53185a717301d"><div class="ttname"><a href="classOptionBase.html#a21e8ccc08eef254ceee53185a717301d">OptionBase::extractPossibilityDescriptions</a></div><div class="ttdeci">static PossibilityDescriptions extractPossibilityDescriptions(const std::vector< OptionPossibility< T >> possibilities)</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00294">CommandLine.h:294</a></div></div>
|
|
124
|
+
</div><!-- fragment --></div><!-- contents -->
|
|
125
|
+
<!-- start footer part -->
|
|
126
|
+
<hr class="footer"/><address class="footer"><small>
|
|
127
|
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
|
128
|
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
129
|
+
</a> 1.8.13
|
|
130
|
+
</small></address>
|
|
131
|
+
</body>
|
|
132
|
+
</html>
|