blob: 34a031c07a038d29c6d688e35c78453194e607ab [file]
<!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">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Apache GraphAr C++ Library: src/graphar/fwd.h Source File</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" />
</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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Apache GraphAr C++ Library
</div>
<div id="projectbrief">The C++ Library for Apache GraphAr</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'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:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- 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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_360ef3ae5e4df5878fa0b8837112e0b7.html">graphar</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">fwd.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * KIND, either express or implied. See the License for the</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * under the License.</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#pragma once</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;optional&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;result/result.hpp&quot;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;graphar/macros.h&quot;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;graphar/status.h&quot;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">namespace </span>graphar {</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">class </span>Status;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">using</span> Result = cpp::result&lt;T, Status&gt;;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">struct </span>GeneralParams;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">class </span>Yaml;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">class </span>FileSystem;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="keyword">using</span> IdType = int64_t;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="keyword">class </span>DataType;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">enum</span> Cardinality : int32_t { SINGLE, LIST, SET };</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="keyword">enum</span> FileType : int32_t { CSV = 0, PARQUET = 1, ORC = 2, JSON = 3 };</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keyword">enum</span> SelectType : int32_t { PROPERTIES = 0, LABELS = 1 };</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword">enum</span> GetChunkVersion : int32_t { AUTO = 0, V1 = 1, V2 = 2 };</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="keyword">enum class</span> AdjListType : int32_t;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;template &lt;typename T&gt;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;class Array;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;class InfoVersion;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;class Property;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;class PropertyGroup;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;class AdjacentList;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;class Expression;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;class VertexInfo;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;class EdgeInfo;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;class GraphInfo;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;using PropertyGroupVector = std::vector&lt;std::shared_ptr&lt;PropertyGroup&gt;&gt;;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;using AdjacentListVector = std::vector&lt;std::shared_ptr&lt;AdjacentList&gt;&gt;;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;using VertexInfoVector = std::vector&lt;std::shared_ptr&lt;VertexInfo&gt;&gt;;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;using EdgeInfoVector = std::vector&lt;std::shared_ptr&lt;EdgeInfo&gt;&gt;;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;std::shared_ptr&lt;PropertyGroup&gt; CreatePropertyGroup(</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; const std::vector&lt;Property&gt;&amp; properties, FileType file_type,</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; const std::string&amp; prefix = &quot;&quot;);</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;std::shared_ptr&lt;AdjacentList&gt; CreateAdjacentList(</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; AdjListType type, FileType file_type, const std::string&amp; prefix = &quot;&quot;);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;std::shared_ptr&lt;VertexInfo&gt; CreateVertexInfo(</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; const std::string&amp; type, IdType chunk_size,</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; const PropertyGroupVector&amp; property_groups,</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; const std::vector&lt;std::string&gt;&amp; labels = {}, const std::string&amp; prefix = &quot;&quot;,</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; std::shared_ptr&lt;const InfoVersion&gt; version = nullptr);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;std::shared_ptr&lt;EdgeInfo&gt; CreateEdgeInfo(</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; const std::string&amp; src_type, const std::string&amp; edge_type,</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; const std::string&amp; dst_type, IdType chunk_size, IdType src_chunk_size,</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; IdType dst_chunk_size, bool directed,</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; const AdjacentListVector&amp; adjacent_lists,</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; const PropertyGroupVector&amp; property_groups, const std::string&amp; prefix = &quot;&quot;,</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; std::shared_ptr&lt;const InfoVersion&gt; version = nullptr);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;std::shared_ptr&lt;GraphInfo&gt; CreateGraphInfo(</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; const std::string&amp; name, const VertexInfoVector&amp; vertex_infos,</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; const EdgeInfoVector&amp; edge_infos, const std::vector&lt;std::string&gt;&amp; labels,</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; const std::string&amp; prefix,</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; std::shared_ptr&lt;const InfoVersion&gt; version = nullptr,</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; const std::unordered_map&lt;std::string, std::string&gt;&amp; extra_info = {});</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;const std::shared_ptr&lt;DataType&gt;&amp; boolean();</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;const std::shared_ptr&lt;DataType&gt;&amp; int32();</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;const std::shared_ptr&lt;DataType&gt;&amp; int64();</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;const std::shared_ptr&lt;DataType&gt;&amp; float32();</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;const std::shared_ptr&lt;DataType&gt;&amp; float64();</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;const std::shared_ptr&lt;DataType&gt;&amp; string();</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;const std::shared_ptr&lt;DataType&gt;&amp; date();</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;const std::shared_ptr&lt;DataType&gt;&amp; timestamp();</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;std::shared_ptr&lt;DataType&gt; list(const std::shared_ptr&lt;DataType&gt;&amp; value_type);</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;} <span class="comment">// namespace graphar</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;namespace graphar::util {</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="keyword">struct </span>FilterOptions;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="keyword">using</span> Filter = std::shared_ptr&lt;Expression&gt;;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="keyword">using</span> ColumnNames =</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; std::optional&lt;std::reference_wrapper&lt;std::vector&lt;std::string&gt;&gt;&gt;;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;} <span class="comment">// namespace graphar::util</span></div>
</div><!-- fragment --></div><!-- contents -->
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!-- disclaimer_footer.html -->
<footer style="text-align: center; font-size: 12px;">
<div>
<p>
Apache GraphAr is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
</p>
<p>
Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br/>
Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries.
</p>
</div>
</footer>