Files
dl/document/html/dl__file__csv_8h_source.html
2026-09-16 14:07:40 +08:00

518 lines
73 KiB
HTML
Vendored
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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="zh">
<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.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>dl: D:/dl/dl/io/dl_file_csv.h 源文件</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>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.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 id="projectrow">
<td id="projectalign">
<div id="projectname">dl
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.13.1 -->
<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('',false,false,'search.php','搜索',false);
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
/* @license-end */
</script>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_17297ffb27ce571941f5fb5008f01a1f.html">dl</a></li><li class="navelem"><a class="el" href="dir_8618662f707661daa8368f9a64c30c2e.html">io</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">dl_file_csv.h</div></div>
</div><!--header-->
<div class="contents">
<a href="dl__file__csv_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &quot;<a class="code" href="dl__file_8h.html">dl_file.h</a>&quot;</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;<a class="code" href="dl__stream__output_8h.html">memory/dl_stream_output.h</a>&quot;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &quot;<a class="code" href="dl__type_8h.html">dl_type.h</a>&quot;</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;<a class="code" href="dl__range__find_8h.html">base/dl_range_find.h</a>&quot;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &quot;<a class="code" href="dl__vector2_8h.html">base/dl_vector2.h</a>&quot;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &quot;<a class="code" href="dl__math_8h.html">math/dl_math.h</a>&quot;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &quot;<a class="code" href="dl__stream__input_8h.html">memory/dl_stream_input.h</a>&quot;</span></div>
<div class="foldopen" id="foldopen00024" data-start="{" data-end="}">
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="namespacedl_1_1_file_csv.html"> 24</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedl_1_1_file_csv.html">dl::FileCsv</a></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span>{</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="namespacedl_1_1_file_csv.html#ab00bee7d43365196e4c67b1583066e2c"> 27</a></span><span class="keyword">constexpr</span> uint32_t <a class="code hl_variable" href="namespacedl_1_1_file_csv.html#ab00bee7d43365196e4c67b1583066e2c">CSV_FILE_TYPE</a> = 316;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span></div>
<div class="foldopen" id="foldopen00036" data-start="{" data-end="}">
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="namespacedl_1_1_file_csv.html#a2182f9b61d6623fb7453085e4b962cf9"> 36</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="namespacedl_1_1_file_csv.html#a2182f9b61d6623fb7453085e4b962cf9">Read</a>(std::string_view path_name, <a class="code hl_class" href="classdl_1_1_vector2.html">Vector2&lt;std::string&gt;</a>&amp; ret)</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>{</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> assert(!ret.<a class="code hl_function" href="classdl_1_1_vector2.html#adfe4faa64e32eeb23f7b3892a9281250">IsEmpty</a>());</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> std::ifstream ifs = <a class="code hl_function" href="namespacedl_1_1_file.html#a7afdc780937a728bb52260dfab167e20">File::Get</a>(path_name, <span class="keyword">false</span>);</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span> (!ifs.is_open())</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> {</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;csv文件加载失败:{}&quot;</span>, path_name);</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> }</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// 状态</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">enum class</span> Flag</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> {</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <a class="code hl_enumvalue" href="namespacedl.html#aaf3ff734a728db3512bf34543d98b46ba1e23852820b9154316c7c06e2b7ba051">NORMAL</a>, <span class="comment">// 正常</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <a class="code hl_enumvalue" href="namespacedl.html#a9a9c6f421dcef7f54e6c106f7c57cd27a684d325a7303f52e64011467ff5c5758">LEFT</a>, <span class="comment">// 读取到了前引号</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> TWICE, <span class="comment">// 再次读到引号</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }flag;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> flag = Flag::NORMAL;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// 所有</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_class" href="classdl_1_1_vector2.html">Vector2&lt;std::string&gt;</a> all;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// 当前行</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> std::vector&lt;std::string&gt; line;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// 当前段</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> std::string temp;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">while</span> (!ifs.eof())</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> {</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">char</span> ch = ifs.get();</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">switch</span> (flag)</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> {</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">case</span> Flag::NORMAL:</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;\&quot;&#39;</span>)<span class="comment">// 进入引号模式</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> flag = Flag::LEFT;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;,&#39;</span>)<span class="comment">// 写入段</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> {</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> line.push_back(temp);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> temp.clear();</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> }</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;\n&#39;</span>)<span class="comment">// 写入行,还要写入当前段</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> line.push_back(temp);</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> temp.clear();</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> all.<a class="code hl_function" href="classdl_1_1_vector2.html#a3300c39f50e9cf506a8f4896cb82581c">PushBack</a>(line);</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> line.clear();</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> }</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> temp.push_back(ch);</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">case</span> Flag::LEFT:</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;\&quot;&#39;</span>)<span class="comment">// 进入两次引号模式</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> flag = Flag::TWICE;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;\n&#39;</span>)<span class="comment">// 换行符写入</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> temp.push_back(ch);</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> temp.push_back(ch);</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">case</span> Flag::TWICE:</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="comment">// 这里 必须是引号转义,或是结束(逗号结束,或段结束),其他状态则为错误</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;\&quot;&#39;</span>)<span class="comment">//写入一个引号</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> {</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> temp.push_back(ch);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> flag = Flag::LEFT;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> }</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;,&#39;</span>)<span class="comment">// 写入段</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> line.push_back(temp);</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> temp.clear();</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> flag = Flag::NORMAL;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> }</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch == <span class="charliteral">&#39;\n&#39;</span>)<span class="comment">// 写入行与段</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> line.push_back(temp);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> temp.clear();</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> all.<a class="code hl_function" href="classdl_1_1_vector2.html#a3300c39f50e9cf506a8f4896cb82581c">PushBack</a>(line);</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> line.clear();</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> flag = Flag::NORMAL;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> }</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> {</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_function" href="namespacedl.html#a63038d8670ad1704740ccba95c1c4341">log_err0</a>(<span class="stringliteral">&quot;引号转义出现错误的状态!&quot;</span>);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <a class="code hl_function" href="namespacedl.html#a63038d8670ad1704740ccba95c1c4341">log_err0</a>(<span class="stringliteral">&quot;错误的状态!&quot;</span>);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> }</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> ret = std::move(all);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span>}</div>
</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment">//</span></div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment">//* @brief 序列化 逗号分隔文件</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment">//*/</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment">//void Serialize(std::string_view path_name, std::string_view out)</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment">//{</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment">// Vector2&lt;std::string&gt; mul_str;</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment">// if (!Read(path_name, mul_str))</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="comment">// return;</span></div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span><span class="comment">//</span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="comment">// struct TypeFlag</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="comment">// {</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="comment">// enum</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="comment">// {</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment">// Z8,</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="comment">// Z16,</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment">// Z32,</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment">// Z64,</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment">// N8,</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment">// N16,</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment">// N32,</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment">// N64,</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="comment">// FLOAT,</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment">// DOUBLE,</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment">// STRING,</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment">// NONE,//占位(=或未知类型)</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment">// ALIGN,//字节对齐填充</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="comment">// }_type;</span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment">// size_t _size;//用于字符串记录长度,包含结束符</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="comment">// };</span></div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment">//</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment">// //单个元素缓冲区</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment">// std::byte* p = nullptr;</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="comment">// std::size_t line_size = 0;</span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment">//</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="comment">// //输出流</span></div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><span class="comment">// StreamOutput s;</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="comment">//</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment">// //类型标签</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment">// std::vector&lt;TypeFlag&gt; vec_flag;</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment">//</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment">// //寻找 = 的位置</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="comment">// Index2 pos = Find::FirstIndex(mul_str, &quot;=&quot;);</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment">//</span></div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="comment">// if (pos[1] == -1)</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="comment">// {</span></div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="comment">// log_err(&quot;=标签查找失败:{}&quot;, path_name);</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment">// return;</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment">// }</span></div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="comment">//</span></div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment">// //字段行</span></div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="comment">// {</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment">// std::string* vec_str = mul_str[pos[1]];</span></div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="comment">//</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="comment">// //最大字段长度</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="comment">// std::size_t max_size = 1;</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="comment">// //统计数据大小</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment">// for (std::size_t i = pos[0]; i &lt; mul_str.GetWidth(); ++i)</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment">// {</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment">// if (vec_str[i] == &quot;uint8_t&quot;)</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment">// {</span></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="comment">// vec_flag.push_back({ TypeFlag::N8, 0 });</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment">// line_size += sizeof(uint8_t);</span></div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="comment">// }</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="comment">// else if (vec_str[i] == &quot;uint16_t&quot;)</span></div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="comment">// {</span></div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="comment">// vec_flag.push_back({ TypeFlag::N16, 0 });</span></div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="comment">// line_size += sizeof(uint16_t);</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="comment">// }</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment">// else if (vec_str[i] == &quot;uint32_t&quot;)</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="comment">// {</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="comment">// vec_flag.push_back({ TypeFlag::N32, 0 });</span></div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="comment">// line_size += sizeof(uint32_t);</span></div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span><span class="comment">// }</span></div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="comment">// else if (vec_str[i] == &quot;int32_t&quot;)</span></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="comment">// {</span></div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="comment">// vec_flag.push_back({ TypeFlag::Z32, 0 });</span></div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="comment">// line_size += sizeof(int32_t);</span></div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><span class="comment">// }</span></div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="comment">// else if (vec_str[i] == &quot;float&quot;)</span></div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment">// {</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment">// if (sizeof(float) &gt; max_size)</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="comment">// max_size = sizeof(float);</span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="comment">//</span></div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment">// std::size_t start = line_size ? Math::Align(line_size, alignof(float)) : 0;</span></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="comment">// if (start != line_size) vec_flag.push_back({ TypeFlag::ALIGN, start - line_size });</span></div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="comment">//</span></div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span><span class="comment">// vec_flag.push_back({ TypeFlag::FLOAT, 0 });</span></div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span><span class="comment">// line_size += sizeof(float);</span></div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span><span class="comment">// }</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="comment">// else if (vec_str[i] == &quot;double&quot;)</span></div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="comment">// {</span></div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="comment">// if (sizeof(double) &gt; max_size)</span></div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="comment">// max_size = sizeof(double);</span></div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="comment">//</span></div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="comment">// std::size_t start = line_size ? Math::Align(line_size, alignof(double)) : 0;</span></div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="comment">// if (start != line_size) vec_flag.push_back({ TypeFlag::ALIGN, start - line_size });</span></div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="comment">//</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span><span class="comment">// vec_flag.push_back({ TypeFlag::DOUBLE, 0 });</span></div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span><span class="comment">// line_size += sizeof(double);</span></div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="comment">// }</span></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><span class="comment">// else</span></div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="comment">// {</span></div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span><span class="comment">// size_t pos = vec_str[i].find(&quot;str&quot;);</span></div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="comment">// if (pos != std::string::npos)</span></div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="comment">// {</span></div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span><span class="comment">// if (sizeof(char) &gt; max_size)</span></div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span><span class="comment">// max_size = sizeof(char);</span></div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span><span class="comment">//</span></div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span><span class="comment">// size_t start = line_size ? Math::Align(line_size, alignof(char)) : 0;</span></div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="comment">// if (start != line_size) vec_flag.push_back({ TypeFlag::ALIGN, start - line_size });</span></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="comment">//</span></div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="comment">// //</span></div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="comment">// size_t str_length = std::stoi(std::string(vec_str[i].begin() + 3, vec_str[i].end()));</span></div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="comment">// if (str_length == 0)</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="comment">// {</span></div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="comment">// log_err(&quot;字符串必须指定长度,例如str8{}&quot;, path_name);</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="comment">// str_length = 16;//手动设置大小</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="comment">// }</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="comment">// vec_flag.push_back({ TypeFlag::STRING, str_length });</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">// line_size += sizeof(char) * str_length;</span></div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="comment">// }</span></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="comment">// else</span></div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="comment">// {</span></div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="comment">// vec_flag.push_back({ TypeFlag::NONE, 0 });</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="comment">// line_size += 0;</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="comment">// if (!vec_str[i].empty() &amp;&amp; vec_str[i] != &quot;=&quot;)</span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment">// log_warn(&quot;未知类型标签:{}{}&quot;, path_name, vec_str[i]);</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="comment">// }</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment">// }</span></div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment">// }</span></div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="comment">//</span></div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span><span class="comment">// if (line_size == 0)</span></div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="comment">// {</span></div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="comment">// log_err(&quot;数据大小为0{}&quot;, path_name );</span></div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="comment">// return;</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="comment">// }</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="comment">//</span></div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="comment">// //最大元素对齐</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span><span class="comment">// std::size_t start = line_size ? Math::Align(line_size, max_size) : 0;</span></div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span><span class="comment">// line_size = start;</span></div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="comment">//</span></div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="comment">// p = (std::byte*)malloc(line_size);</span></div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span><span class="comment">//</span></div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span><span class="comment">//</span></div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="comment">// //写入类型</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="comment">// uint32_t id = CSV_FILE_TYPE;</span></div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="comment">// s.Write(&amp;id);</span></div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="comment">//</span></div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="comment">// //写入单行大小</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span><span class="comment">// s.Write64(&amp;line_size);</span></div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="comment">// }</span></div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span><span class="comment">//</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="comment">// //统计除了用于对齐的元素个数</span></div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="comment">// ptrdiff_t w = pos[0] + count_if(vec_flag.begin(), vec_flag.end(), [](const TypeFlag&amp; flag)</span></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="comment">// {</span></div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="comment">// return flag._type != TypeFlag::ALIGN;</span></div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="comment">// });</span></div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><span class="comment">//</span></div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span><span class="comment">// //数据行</span></div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span><span class="comment">// for (size_t h = pos[1] + 1; h &lt; mul_str.GetHeight(); ++h)</span></div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="comment">// {</span></div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span><span class="comment">// std::string* vec_str = mul_str[h];</span></div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><span class="comment">//</span></div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="comment">// if (vec_str[pos[0]] != &quot;+&quot;)</span></div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span><span class="comment">// {</span></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="comment">// continue;</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="comment">// }</span></div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="comment">//</span></div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="comment">// if (p == nullptr</span></div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span><span class="comment">// || vec_flag.empty()</span></div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span><span class="comment">// || line_size == 0)</span></div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span><span class="comment">// {</span></div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="comment">// log_err(&quot;类型标签未成功读取:{}&quot;, path_name);</span></div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="comment">// return;</span></div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span><span class="comment">// }</span></div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="comment">//</span></div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="comment">// if (vec_str.size() != w)</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="comment">// {</span></div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="comment">// std::string str_all;</span></div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="comment">// for (auto&amp; iter : vec_str)</span></div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><span class="comment">// {</span></div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="comment">// str_all += iter;</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span><span class="comment">// str_all += &quot;,&quot;;</span></div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="comment">// }</span></div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span><span class="comment">// log_err(&quot;此行元素个数不匹配:{}{}&quot;, path_name, str_all);</span></div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="comment">// continue;</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="comment">// }</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="comment">//</span></div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span><span class="comment">// size_t offset = 0;</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="comment">// size_t j = pos[0];//元素下标</span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment">// for (size_t i = 0; i &lt; vec_flag.size(); ++i)</span></div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span><span class="comment">// {</span></div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span><span class="comment">// if (vec_flag[i]._type == TypeFlag::ALIGN)</span></div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span><span class="comment">// {</span></div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="comment">// offset += vec_flag[i]._size;</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span><span class="comment">// continue;</span></div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="comment">// }</span></div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="comment">//</span></div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span><span class="comment">//#define DEF_SERIALIZE_CSV_LINE(flag, type, func)\</span></div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span><span class="comment">//if (vec_flag[i]._type == TypeFlag::flag)\</span></div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="comment">//{\</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><span class="comment">//type v = 0;\</span></div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="comment">//if (!vec_str[j].empty())\</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment">//{\</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="comment">// if(Sub::IsBegin(vec_str[j], std::string(&quot;0x&quot;)))\</span></div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span><span class="comment">// v = func(vec_str[j], nullptr, 16);\</span></div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="comment">// else\</span></div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span><span class="comment">// v = func(vec_str[j]);\</span></div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span><span class="comment">//}\</span></div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span><span class="comment">//*(type*)(p + offset) = v;\</span></div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span><span class="comment">//offset += sizeof(type);\</span></div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span><span class="comment">//++j;\</span></div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="comment">//continue;\</span></div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span><span class="comment">//}</span></div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="comment">//</span></div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="comment">//#define DEF_SERIALIZE_CSV_LINE_F(flag, type, func)\</span></div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span><span class="comment">//if (vec_flag[i]._type == TypeFlag::flag)\</span></div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span><span class="comment">//{\</span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span><span class="comment">//*(type*)(p + offset) = (type)(vec_str[j].empty() ? 0 : func(vec_str[j]));\</span></div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span><span class="comment">//offset += sizeof(type);\</span></div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span><span class="comment">//++j;\</span></div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span><span class="comment">//continue;\</span></div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span><span class="comment">//}</span></div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span><span class="comment">// DEF_SERIALIZE_CSV_LINE(Z8, int8_t, stoi);</span></div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span><span class="comment">// DEF_SERIALIZE_CSV_LINE(Z16, int16_t, stoi);</span></div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span><span class="comment">// DEF_SERIALIZE_CSV_LINE(Z32, int32_t, stoi);</span></div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span><span class="comment">// DEF_SERIALIZE_CSV_LINE(Z64, int64_t, stoll);</span></div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span><span class="comment">// DEF_SERIALIZE_CSV_LINE(N8, uint8_t, stoi);</span></div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span><span class="comment">// DEF_SERIALIZE_CSV_LINE(N16, uint16_t, stoi);</span></div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><span class="comment">// DEF_SERIALIZE_CSV_LINE(N32, uint32_t, stoul);</span></div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="comment">// DEF_SERIALIZE_CSV_LINE(N64, uint64_t, stoull);</span></div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span><span class="comment">// DEF_SERIALIZE_CSV_LINE_F(FLOAT, float, stof);</span></div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span><span class="comment">// DEF_SERIALIZE_CSV_LINE_F(DOUBLE, double, stod);</span></div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span><span class="comment">//</span></div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span><span class="comment">// if (vec_flag[i]._type == TypeFlag::STRING)</span></div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span><span class="comment">// {//string</span></div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="comment">// if (vec_str[j].empty())</span></div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="comment">// *(char*)(p + offset) = 0;</span></div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span><span class="comment">// else//strcpy_s并没有考虑源过大</span></div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span><span class="comment">// CodeCvt::Utf8::Copy((char*)(p + offset), vec_flag[i]._size, vec_str[j]);</span></div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="comment">//</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="comment">// //strcpy_s((char*)(p + offset), vec_flag[i]._size, vec_str[j].c_str());</span></div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span><span class="comment">// offset += sizeof(char) * vec_flag[i]._size;</span></div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span><span class="comment">// }</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span><span class="comment">//</span></div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span><span class="comment">// ++j;</span></div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><span class="comment">//</span></div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span><span class="comment">// }</span></div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span><span class="comment">//</span></div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span><span class="comment">// if (line_size != offset)</span></div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="comment">// {</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="comment">// log_err(&quot;单行写入大小不匹配:{}&quot;, path_name );</span></div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span><span class="comment">// }</span></div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="comment">//</span></div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span><span class="comment">// s.Write(p, line_size);</span></div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="comment">// }</span></div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="comment">// free(p);</span></div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span><span class="comment">// s.Save(out);</span></div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="comment">//}</span></div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> </div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span></div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> F&gt;</div>
<div class="foldopen" id="foldopen00394" data-start="{" data-end="}">
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"><a class="line" href="namespacedl_1_1_file_csv.html#a2fe311cb59b06381b028fc4150b4611f"> 394</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacedl_1_1_file_csv.html#a2fe311cb59b06381b028fc4150b4611f">Deserialize</a>(std::string_view path_name, <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a800618943025315f869e4e1f09471012">F</a> fn)</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span>{</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <a class="code hl_class" href="classdl_1_1_stream_input.html">StreamInput</a> s;</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a82688a5d8df6de9ea1af6139b5fdfd11">LoadFromFile</a>(path_name);</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> </div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="comment">//id</span></div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> uint32_t <span class="keywordtype">id</span> = 0;</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> != <a class="code hl_variable" href="namespacedl_1_1_file_csv.html#ab00bee7d43365196e4c67b1583066e2c">CSV_FILE_TYPE</a>)</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> {</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;CSV二进制文件错误:{}&quot;</span>, path_name);</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> }</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> </div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="comment">//大小检查</span></div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> std::size_t size = 0;</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a458d72345d848d4e8bc0ad71a83e2163">Read64</a>(&amp;size);</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">if</span> (size != <span class="keyword">sizeof</span>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>))</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> {</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;CSV二进制文件不匹配POD类型大小{},{}:{}&quot;</span>, size, <span class="keyword">sizeof</span>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>), path_name);</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> }</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> </div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> </div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">while</span> (!s.<a class="code hl_function" href="classdl_1_1_stream_input.html#ab6dcb1cc4021576f6ade1ef13510d260">IsEnd</a>())</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> {</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a> t;</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;t);</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> fn(t);</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> }</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span>}</div>
</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> </div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00427" data-start="{" data-end="}">
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"><a class="line" href="namespacedl_1_1_file_csv.html#a0ef599bb5080e56a6328d2b7bf6154cb"> 427</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacedl_1_1_file_csv.html#a2fe311cb59b06381b028fc4150b4611f">Deserialize</a>(std::string_view path_name, std::vector&lt;T&gt;&amp; container)</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span>{</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <a class="code hl_function" href="namespacedl_1_1_file_csv.html#a2fe311cb59b06381b028fc4150b4611f">Deserialize&lt;T&gt;</a>(path_name, [&amp;](<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>&amp; line)</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> {</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> container.push_back(line);</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> });</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span>}</div>
</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span>}</div>
</div>
<div class="ttc" id="aclassdl_1_1_stream_input_html"><div class="ttname"><a href="classdl_1_1_stream_input.html">dl::StreamInput</a></div><div class="ttdoc">二进制输入流</div><div class="ttdef"><b>定义</b> <a href="dl__stream__input_8h_source.html#l00031">dl_stream_input.h:32</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_a45078239838139420b8d25dcf412f642"><div class="ttname"><a href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">dl::StreamInput::Read</a></div><div class="ttdeci">void Read(T *data)</div><div class="ttdef"><b>定义</b> <a href="dl__stream__input_8h_source.html#l00041">dl_stream_input.h:41</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_a458d72345d848d4e8bc0ad71a83e2163"><div class="ttname"><a href="classdl_1_1_stream_input.html#a458d72345d848d4e8bc0ad71a83e2163">dl::StreamInput::Read64</a></div><div class="ttdeci">void Read64(T *data)</div><div class="ttdoc">写入一个类型,写为64位,用于在64位平台的大小不一致,所以特殊处理</div><div class="ttdef"><b>定义</b> <a href="dl__stream__input_8h_source.html#l00050">dl_stream_input.h:50</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_a82688a5d8df6de9ea1af6139b5fdfd11"><div class="ttname"><a href="classdl_1_1_stream_input.html#a82688a5d8df6de9ea1af6139b5fdfd11">dl::StreamInput::LoadFromFile</a></div><div class="ttdeci">bool LoadFromFile(std::string_view path_name, bool decompress=false, size_t length=0)</div><div class="ttdoc">从文件读到内存,可选长度</div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_ab6dcb1cc4021576f6ade1ef13510d260"><div class="ttname"><a href="classdl_1_1_stream_input.html#ab6dcb1cc4021576f6ade1ef13510d260">dl::StreamInput::IsEnd</a></div><div class="ttdeci">bool IsEnd()</div></div>
<div class="ttc" id="aclassdl_1_1_vector2_html"><div class="ttname"><a href="classdl_1_1_vector2.html">dl::Vector2</a></div><div class="ttdoc">2维vector</div><div class="ttdef"><b>定义</b> <a href="dl__vector2_8h_source.html#l00030">dl_vector2.h:31</a></div></div>
<div class="ttc" id="aclassdl_1_1_vector2_html_a3300c39f50e9cf506a8f4896cb82581c"><div class="ttname"><a href="classdl_1_1_vector2.html#a3300c39f50e9cf506a8f4896cb82581c">dl::Vector2::PushBack</a></div><div class="ttdeci">void PushBack(std::vector&lt; T &gt; &amp;vec)</div><div class="ttdoc">插入行</div><div class="ttdef"><b>定义</b> <a href="dl__vector2_8h_source.html#l00204">dl_vector2.h:204</a></div></div>
<div class="ttc" id="aclassdl_1_1_vector2_html_adfe4faa64e32eeb23f7b3892a9281250"><div class="ttname"><a href="classdl_1_1_vector2.html#adfe4faa64e32eeb23f7b3892a9281250">dl::Vector2::IsEmpty</a></div><div class="ttdeci">bool IsEmpty() const</div><div class="ttdef"><b>定义</b> <a href="dl__vector2_8h_source.html#l00212">dl_vector2.h:212</a></div></div>
<div class="ttc" id="adl__file_8h_html"><div class="ttname"><a href="dl__file_8h.html">dl_file.h</a></div><div class="ttdoc">文件系统</div></div>
<div class="ttc" id="adl__log_8h_html_abc86a6b34614cb6484cdf935d9350abd"><div class="ttname"><a href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a></div><div class="ttdeci">#define log_err(...)</div><div class="ttdef"><b>定义</b> <a href="dl__log_8h_source.html#l00284">dl_log.h:284</a></div></div>
<div class="ttc" id="adl__math_8h_html"><div class="ttname"><a href="dl__math_8h.html">dl_math.h</a></div><div class="ttdoc">数学相关的通用算法</div></div>
<div class="ttc" id="adl__range__find_8h_html"><div class="ttname"><a href="dl__range__find_8h.html">dl_range_find.h</a></div><div class="ttdoc">查找</div></div>
<div class="ttc" id="adl__stream__input_8h_html"><div class="ttname"><a href="dl__stream__input_8h.html">dl_stream_input.h</a></div><div class="ttdoc">输入流</div></div>
<div class="ttc" id="adl__stream__output_8h_html"><div class="ttname"><a href="dl__stream__output_8h.html">dl_stream_output.h</a></div><div class="ttdoc">输出流</div></div>
<div class="ttc" id="adl__type_8h_html"><div class="ttname"><a href="dl__type_8h.html">dl_type.h</a></div><div class="ttdoc">通用类型</div></div>
<div class="ttc" id="adl__vector2_8h_html"><div class="ttname"><a href="dl__vector2_8h.html">dl_vector2.h</a></div><div class="ttdoc">2维vector</div></div>
<div class="ttc" id="anamespacedl_1_1_file_csv_html"><div class="ttname"><a href="namespacedl_1_1_file_csv.html">dl::FileCsv</a></div><div class="ttdoc">csv格式解析</div><div class="ttdef"><b>定义</b> <a href="#l00024">dl_file_csv.h:25</a></div></div>
<div class="ttc" id="anamespacedl_1_1_file_csv_html_a2182f9b61d6623fb7453085e4b962cf9"><div class="ttname"><a href="namespacedl_1_1_file_csv.html#a2182f9b61d6623fb7453085e4b962cf9">dl::FileCsv::Read</a></div><div class="ttdeci">bool Read(std::string_view path_name, Vector2&lt; std::string &gt; &amp;ret)</div><div class="ttdoc">读取一个CSV文件,拆解为每行(换行使用 替代,所有/变为\)</div><div class="ttdef"><b>定义</b> <a href="#l00036">dl_file_csv.h:36</a></div></div>
<div class="ttc" id="anamespacedl_1_1_file_csv_html_a2fe311cb59b06381b028fc4150b4611f"><div class="ttname"><a href="namespacedl_1_1_file_csv.html#a2fe311cb59b06381b028fc4150b4611f">dl::FileCsv::Deserialize</a></div><div class="ttdeci">void Deserialize(std::string_view path_name, F fn)</div><div class="ttdoc">序列化 逗号分隔文件</div><div class="ttdef"><b>定义</b> <a href="#l00394">dl_file_csv.h:394</a></div></div>
<div class="ttc" id="anamespacedl_1_1_file_csv_html_ab00bee7d43365196e4c67b1583066e2c"><div class="ttname"><a href="namespacedl_1_1_file_csv.html#ab00bee7d43365196e4c67b1583066e2c">dl::FileCsv::CSV_FILE_TYPE</a></div><div class="ttdeci">constexpr uint32_t CSV_FILE_TYPE</div><div class="ttdef"><b>定义</b> <a href="#l00027">dl_file_csv.h:27</a></div></div>
<div class="ttc" id="anamespacedl_1_1_file_html_a7afdc780937a728bb52260dfab167e20"><div class="ttname"><a href="namespacedl_1_1_file.html#a7afdc780937a728bb52260dfab167e20">dl::File::Get</a></div><div class="ttdeci">std::ifstream Get(std::string_view path_name, bool is_binary=true)</div></div>
<div class="ttc" id="anamespacedl_html_a38a0162879cdbfbbe99ba16e7a170132a800618943025315f869e4e1f09471012"><div class="ttname"><a href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132a800618943025315f869e4e1f09471012">dl::KeyCode::F</a></div><div class="ttdeci">@ F</div><div class="ttdef"><b>定义</b> <a href="dl__input_8h_source.html#l00107">dl_input.h:107</a></div></div>
<div class="ttc" id="anamespacedl_html_a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3"><div class="ttname"><a href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">dl::KeyCode::T</a></div><div class="ttdeci">@ T</div><div class="ttdef"><b>定义</b> <a href="dl__input_8h_source.html#l00121">dl_input.h:121</a></div></div>
<div class="ttc" id="anamespacedl_html_a63038d8670ad1704740ccba95c1c4341"><div class="ttname"><a href="namespacedl.html#a63038d8670ad1704740ccba95c1c4341">dl::log_err0</a></div><div class="ttdeci">void log_err0(std::string_view str, DL_SOURCE_LOCATION)</div></div>
<div class="ttc" id="anamespacedl_html_a9a9c6f421dcef7f54e6c106f7c57cd27a684d325a7303f52e64011467ff5c5758"><div class="ttname"><a href="namespacedl.html#a9a9c6f421dcef7f54e6c106f7c57cd27a684d325a7303f52e64011467ff5c5758">dl::PadCode::LEFT</a></div><div class="ttdeci">@ LEFT</div><div class="ttdef"><b>定义</b> <a href="dl__input_8h_source.html#l00030">dl_input.h:30</a></div></div>
<div class="ttc" id="anamespacedl_html_aaf3ff734a728db3512bf34543d98b46ba1e23852820b9154316c7c06e2b7ba051"><div class="ttname"><a href="namespacedl.html#aaf3ff734a728db3512bf34543d98b46ba1e23852820b9154316c7c06e2b7ba051">dl::StringType::NORMAL</a></div><div class="ttdeci">@ NORMAL</div><div class="ttdef"><b>定义</b> <a href="dl__string_8h_source.html#l00195">dl_string.h:195</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1
</small></address>
</div><!-- doc-content -->
</body>
</html>