| <!DOCTYPE html><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.9.8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <title>Apache OpenDAL™ C++ Binding: Apache OpenDAL™ CPP Binding (WIP)</title> |
| <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> |
| <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"> |
| </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="projectalign"> |
| <div id="projectname">Apache OpenDAL™ C++ Binding |
| </div> |
| <div id="projectbrief">The C++ binding for Apache OpenDAL™</div> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <!-- end header part --> |
| <!-- Generated by Doxygen 1.9.8 --> |
| <script type="text/javascript"> |
| /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ |
| var searchBox = new SearchBox("searchBox", "search/",'.html'); |
| /* @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&dn=expat.txt MIT */ |
| $(function() { |
| initMenu('',true,false,'search.php','Search'); |
| $(document).ready(function() { init_search(); }); |
| }); |
| /* @license-end */ |
| </script> |
| <div id="main-nav"></div> |
| </div><!-- top --> |
| <!-- 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><div class="header"> |
| <div class="headertitle"><div class="title">Apache OpenDAL™ CPP Binding (WIP) </div></div> |
| </div><!--header--> |
| <div class="contents"> |
| <div class="textblock"><p><a class="anchor" id="md__2home_2runner_2work_2opendal_2opendal_2bindings_2cpp_2README"></a> <a href="https://opendal.apache.org/bindings/cpp/"><img src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="inline"></a></p> |
| <blockquote class="doxtable"> |
| <p><b>Note</b>: This C++ binding follows the <a href="https://google.github.io/styleguide/cppguide.html">Google C++ Style Guide</a> for consistent and maintainable code. </p> |
| </blockquote> |
| <p><img src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="inline"></p> |
| <blockquote class="doxtable"> |
| <p><b>Note</b>: This binding has its own independent version number, which may differ from the Rust core version. When checking for updates or compatibility, always refer to this binding's version rather than the core version. </p> |
| </blockquote> |
| <p>Documents: <a href="https://opendal.apache.org/docs/cpp/"><img src="/img/external/2df9af50d923c7e6cd0c9521c3d4e194.svg" alt="Documents" class="inline"></a></p> |
| <h1><a class="anchor" id="autotoc_md1"></a> |
| Example</h1> |
| <div class="fragment"><div class="line"><span class="preprocessor">#include "<a class="code" href="opendal_8hpp.html">opendal.hpp</a>"</span></div> |
| <div class="line"><span class="preprocessor">#include <vector></span></div> |
| <div class="line"> </div> |
| <div class="line"><span class="keywordtype">int</span> main() {</div> |
| <div class="line"> <span class="keyword">auto</span> op = <a class="code hl_class" href="classopendal_1_1Operator.html">opendal::Operator</a>(<span class="stringliteral">"memory"</span>);</div> |
| <div class="line"> std::vector<uint8_t> data = {1, 2, 3, 4, 5};</div> |
| <div class="line"> op.Write(<span class="stringliteral">"test"</span>, data);</div> |
| <div class="line"> <span class="keyword">auto</span> result = op.Read(<span class="stringliteral">"test"</span>); <span class="comment">// result == data</span></div> |
| <div class="line">}</div> |
| <div class="ttc" id="aclassopendal_1_1Operator_html"><div class="ttname"><a href="classopendal_1_1Operator.html">opendal::Operator</a></div><div class="ttdoc">Operator is the entry for all public APIs.</div><div class="ttdef"><b>Definition</b> opendal.hpp:47</div></div> |
| <div class="ttc" id="aopendal_8hpp_html"><div class="ttname"><a href="opendal_8hpp.html">opendal.hpp</a></div></div> |
| </div><!-- fragment --><p>More examples can be found <a href="../../examples/cpp">here</a>.</p> |
| <h1><a class="anchor" id="autotoc_md2"></a> |
| Using</h1> |
| <h2><a class="anchor" id="autotoc_md3"></a> |
| CMake</h2> |
| <p>You can use <code>FetchContent</code> to add OpenDAL to your project.</p> |
| <div class="fragment"><div class="line">FetchContent_Declare(</div> |
| <div class="line"> opendal-cpp</div> |
| <div class="line"> GIT_REPOSITORY https://github.com/apache/opendal.git</div> |
| <div class="line"> GIT_TAG v0.40.0</div> |
| <div class="line"> SOURCE_SUBDIR bindings/cpp</div> |
| <div class="line">)</div> |
| <div class="line">FetchContent_MakeAvailable(opendal-cpp)</div> |
| </div><!-- fragment --><p>Or you can download the source code and add it to your project.</p> |
| <div class="fragment"><div class="line">mkdir third_party</div> |
| <div class="line">cd third_party</div> |
| <div class="line">git clone https://github.com/apache/opendal.git</div> |
| <div class="line">git checkout v0.40.0</div> |
| </div><!-- fragment --><div class="fragment"><div class="line">add_subdirectory(third_party/opendal/bindings/cpp)</div> |
| </div><!-- fragment --><p>Now you can use OpenDAL in your project.</p> |
| <div class="fragment"><div class="line">target_link_libraries(your_target opendal_cpp)</div> |
| </div><!-- fragment --><h2><a class="anchor" id="autotoc_md4"></a> |
| Others</h2> |
| <p>Support for more package managers is coming soon!</p> |
| <h1><a class="anchor" id="autotoc_md5"></a> |
| Compiling</h1> |
| <h2><a class="anchor" id="autotoc_md6"></a> |
| Prerequisites</h2> |
| <ul> |
| <li>CMake >= 3.22</li> |
| <li>C++ compiler with C++17 support</li> |
| <li><b>Currently only Clang or AppleClang are supported</b></li> |
| </ul> |
| <h2><a class="anchor" id="autotoc_md7"></a> |
| Build</h2> |
| <div class="fragment"><div class="line">mkdir build</div> |
| <div class="line">cd build</div> |
| <div class="line"># Add -DOPENDAL_DEV=ON to make development environment for OpenDAL</div> |
| <div class="line">cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..</div> |
| <div class="line">make</div> |
| </div><!-- fragment --><h2><a class="anchor" id="autotoc_md8"></a> |
| Dev Setup</h2> |
| <p>We provide a default VSCode configuration in <code>.vscode/settings.json</code> at the project root. After installing the clangd extension in VSCode, restart the editor to enable proper code completion and IntelliSense support.</p> |
| <h2><a class="anchor" id="autotoc_md9"></a> |
| Test</h2> |
| <p>You should build the project with <code>OPENDAL_ENABLE_TESTING</code> option. Then run:</p> |
| <div class="fragment"><div class="line">make test</div> |
| </div><!-- fragment --><h2><a class="anchor" id="autotoc_md10"></a> |
| Docs</h2> |
| <p>You should build the project with <code>OPENDAL_ENABLE_DOCUMENTATION</code> option. Then run:</p> |
| <div class="fragment"><div class="line">make docs</div> |
| </div><!-- fragment --><h2><a class="anchor" id="autotoc_md11"></a> |
| CMake Options</h2> |
| <ul> |
| <li><code>OPENDAL_DEV</code>: Enable development environment for OpenDAL. It will enable most development options. With this option, you don't need to set other options. Default: <code>OFF</code></li> |
| <li><code>OPENDAL_ENABLE_ADDRESS_SANITIZER</code>: Enable address sanitizer. Default: <code>OFF</code></li> |
| <li><code>OPENDAL_ENABLE_DOCUMENTATION</code>: Enable documentation. Default: <code>OFF</code></li> |
| <li><code>OPENDAL_DOCS_ONLY</code>: Only build documentation. Default: <code>OFF</code></li> |
| <li><code>OPENDAL_ENABLE_TESTING</code>: Enable testing. Default: <code>OFF</code></li> |
| <li><code>OPENDAL_ENABLE_ASYNC</code>: Enable async support. Requires Clang or AppleClang with C++20. Default: <code>OFF</code></li> |
| <li><code>OPENDAL_FEATURES</code>: Specify OpenDAL services to include, like <code>"opendal/services-s3,opendal/services-memory"</code>. Default: <code>""</code></li> |
| </ul> |
| <h1><a class="anchor" id="autotoc_md12"></a> |
| License and Trademarks</h1> |
| <p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p> |
| <p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation. </p> |
| </div></div><!-- PageDoc --> |
| </div><!-- contents --> |
| <!-- start footer part --> |
| <hr class="footer"><address class="footer"><small> |
| Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"></a> 1.9.8 |
| </small></address> |
| |
| |
| </body></html> |