Files
libconfig/docs/html/config_8h.html

198 lines
15 KiB
HTML
Raw Normal View History

2026-02-02 08:42:30 -05:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libconfig: src/config/include/fourdst/config/config.h File Reference</title>
<link rel="icon" href="logo.png" type="image/x-icon" />
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
2026-02-02 08:42:30 -05:00
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
<td id="projectalign">
<div id="projectname">libconfig<span id="projectnumber">&#160;v2.1.0</span>
</div>
<div id="projectbrief">Reflection based C++ configuration library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('config_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">config.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Main entry point for the <a class="el" href="namespacefourdst_1_1config.html">fourdst::config</a> library.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="base_8h.html">fourdst/config/base.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="exceptions_8h.html">fourdst/config/exceptions/exceptions.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="cli_8h.html">fourdst/config/cli.h</a>&quot;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for config.h:</div>
<div class="dyncontent">
<div class="center"><div class="zoom"><iframe scrolling="no" frameborder="0" src="config_8h__incl.svg" width="100%" height="571"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div></div>
</div>
</div><a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Main entry point for the <a class="el" href="namespacefourdst_1_1config.html">fourdst::config</a> library. </p>
<p>This header includes all necessary components of the configuration library, providing a unified interface for defining, loading, saving, and integrating configuration structures.</p>
<h1><a class="anchor" id="features"></a>
Features</h1>
<ul>
<li><b>Type-safe Configuration</b>: Define configs using standard C++ structs.</li>
<li><b>Serialization</b>: Built-in support for TOML loading and saving via <code>reflect-cpp</code>.</li>
<li><b>Schema Generation</b>: Generate JSON schemas for editor autocompletion (VS Code, etc.).</li>
<li><b>CLI Integration</b>: Seamlessly expose config fields as command-line arguments (supports CLI11).</li>
<li><b>Error Handling</b>: Comprehensive exception hierarchy for parsing and I/O errors.</li>
</ul>
<dl class="section user"><dt>Examples</dt><dd></dd></dl>
<p><b>1. Basic Definition and I/O</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="config_8h.html">fourdst/config/config.h</a>&quot;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">struct </span>Physics {</div>
<div class="line"> <span class="keywordtype">double</span> gravity = 9.81;</div>
<div class="line"> <span class="keywordtype">bool</span> enable_drag = <span class="keyword">true</span>;</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keyword">struct </span>AppConfig {</div>
<div class="line"> std::string name = <span class="stringliteral">&quot;My Simulation&quot;</span>;</div>
<div class="line"> <span class="keywordtype">int</span> max_steps = 1000;</div>
<div class="line"> Physics physics;</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main() {</div>
<div class="line"> <a class="code hl_class" href="classfourdst_1_1config_1_1_config.html">fourdst::config::Config&lt;AppConfig&gt;</a> cfg;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Access defaults</span></div>
<div class="line"> <span class="keywordflow">if</span> (cfg-&gt;physics.enable_drag) { ... }</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Save to file</span></div>
<div class="line"> cfg.<a class="code hl_function" href="classfourdst_1_1config_1_1_config.html#a91fa54016e231a8361142b51807f047d">save</a>(<span class="stringliteral">&quot;config.toml&quot;</span>);</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Load from file</span></div>
<div class="line"> cfg.<a class="code hl_function" href="classfourdst_1_1config_1_1_config.html#ae0097a0c728ad24a5d03f9a8580eac74">load</a>(<span class="stringliteral">&quot;config.toml&quot;</span>);</div>
<div class="line">}</div>
<div class="ttc" id="aclassfourdst_1_1config_1_1_config_html"><div class="ttname"><a href="classfourdst_1_1config_1_1_config.html">fourdst::config::Config</a></div><div class="ttdoc">Wrapper class for managing strongly-typed configuration structures.</div><div class="ttdef"><b>Definition</b> base.h:113</div></div>
<div class="ttc" id="aclassfourdst_1_1config_1_1_config_html_a91fa54016e231a8361142b51807f047d"><div class="ttname"><a href="classfourdst_1_1config_1_1_config.html#a91fa54016e231a8361142b51807f047d">fourdst::config::Config::save</a></div><div class="ttdeci">void save(std::string_view path) const</div><div class="ttdoc">Saves the current configuration to a TOML file.</div><div class="ttdef"><b>Definition</b> base.h:164</div></div>
<div class="ttc" id="aclassfourdst_1_1config_1_1_config_html_ae0097a0c728ad24a5d03f9a8580eac74"><div class="ttname"><a href="classfourdst_1_1config_1_1_config.html#ae0097a0c728ad24a5d03f9a8580eac74">fourdst::config::Config::load</a></div><div class="ttdeci">void load(const std::string_view path)</div><div class="ttdoc">Loads configuration from a TOML file.</div><div class="ttdef"><b>Definition</b> base.h:249</div></div>
<div class="ttc" id="aconfig_8h_html"><div class="ttname"><a href="config_8h.html">config.h</a></div><div class="ttdoc">Main entry point for the fourdst::config library.</div></div>
</div><!-- fragment --><p><b>2. CLI Integration (CLI11)</b> </p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;CLI/CLI.hpp&quot;</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="config_8h.html">fourdst/config/config.h</a>&quot;</span></div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv) {</div>
<div class="line"> CLI::App app(<span class="stringliteral">&quot;Simulation App&quot;</span>);</div>
<div class="line"> <a class="code hl_class" href="classfourdst_1_1config_1_1_config.html">fourdst::config::Config&lt;AppConfig&gt;</a> cfg;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Automatically registers flags like --name, --max_steps, --physics.gravity</span></div>
<div class="line"> <a class="code hl_function" href="namespacefourdst_1_1config.html#aeca53bef637c1b60bf5fbccc8526a7a0">fourdst::config::register_as_cli</a>(cfg, app);</div>
<div class="line"> </div>
<div class="line"> CLI11_PARSE(app, argc, argv);</div>
<div class="line"> </div>
<div class="line"> std::cout &lt;&lt; <span class="stringliteral">&quot;Starting simulation: &quot;</span> &lt;&lt; cfg-&gt;name &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line">}</div>
<div class="ttc" id="anamespacefourdst_1_1config_html_aeca53bef637c1b60bf5fbccc8526a7a0"><div class="ttname"><a href="namespacefourdst_1_1config.html#aeca53bef637c1b60bf5fbccc8526a7a0">fourdst::config::register_as_cli</a></div><div class="ttdeci">void register_as_cli(T &amp;config, CliApp &amp;app, const std::string &amp;prefix=&quot;&quot;)</div><div class="ttdoc">Registers configuration structure fields as CLI options.</div><div class="ttdef"><b>Definition</b> cli.h:114</div></div>
</div><!-- fragment --><p><b>3. Error Handling</b> </p><div class="fragment"><div class="line"><span class="keywordflow">try</span> {</div>
<div class="line"> cfg.<a class="code hl_function" href="classfourdst_1_1config_1_1_config.html#ae0097a0c728ad24a5d03f9a8580eac74">load</a>(<span class="stringliteral">&quot;missing_file.toml&quot;</span>);</div>
<div class="line">} <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code hl_class" href="classfourdst_1_1config_1_1exceptions_1_1_config_load_error.html">fourdst::config::exceptions::ConfigLoadError</a>&amp; e) {</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot;Could not load config: &quot;</span> &lt;&lt; e.<a class="code hl_function" href="classfourdst_1_1config_1_1exceptions_1_1_config_error.html#aed6ae63fbbc9cb7e1d372904638b1fe6">what</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"> <span class="comment">// Falls back to default values</span></div>
<div class="line">} <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code hl_class" href="classfourdst_1_1config_1_1exceptions_1_1_config_parse_error.html">fourdst::config::exceptions::ConfigParseError</a>&amp; e) {</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot;Invalid config file format: &quot;</span> &lt;&lt; e.<a class="code hl_function" href="classfourdst_1_1config_1_1exceptions_1_1_config_error.html#aed6ae63fbbc9cb7e1d372904638b1fe6">what</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line">}</div>
<div class="ttc" id="aclassfourdst_1_1config_1_1exceptions_1_1_config_error_html_aed6ae63fbbc9cb7e1d372904638b1fe6"><div class="ttname"><a href="classfourdst_1_1config_1_1exceptions_1_1_config_error.html#aed6ae63fbbc9cb7e1d372904638b1fe6">fourdst::config::exceptions::ConfigError::what</a></div><div class="ttdeci">const char * what() const noexcept override</div><div class="ttdoc">Returns the error message.</div><div class="ttdef"><b>Definition</b> exceptions.h:32</div></div>
<div class="ttc" id="aclassfourdst_1_1config_1_1exceptions_1_1_config_load_error_html"><div class="ttname"><a href="classfourdst_1_1config_1_1exceptions_1_1_config_load_error.html">fourdst::config::exceptions::ConfigLoadError</a></div><div class="ttdoc">Thrown when loading the configuration from a file fails.</div><div class="ttdef"><b>Definition</b> exceptions.h:54</div></div>
<div class="ttc" id="aclassfourdst_1_1config_1_1exceptions_1_1_config_parse_error_html"><div class="ttname"><a href="classfourdst_1_1config_1_1exceptions_1_1_config_parse_error.html">fourdst::config::exceptions::ConfigParseError</a></div><div class="ttdoc">Thrown when parsing the configuration file fails.</div><div class="ttdef"><b>Definition</b> exceptions.h:64</div></div>
</div><!-- fragment --> </div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_7e83d1792d529f4aa7126ac7e0b3b699.html">config</a></li><li class="navelem"><a class="el" href="dir_904591e9279cabe43293bc1a827ea462.html">include</a></li><li class="navelem"><a class="el" href="dir_2c16a3647d2e0836781345a6734d56f4.html">fourdst</a></li><li class="navelem"><a class="el" href="dir_db2a2ef06a7c8abde1f4700fa96ffaaa.html">config</a></li><li class="navelem"><a class="el" href="config_8h.html">config.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>