stdex/base64_8hpp_source.html

566 lines
96 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. 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="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.11.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>stdex: include/stdex/base64.hpp 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>
<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>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</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">stdex
</div>
<div id="projectbrief">Additional custom or not Standard C++ covered algorithms</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.11.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @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>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_fca3c47b2ea228727bd6729832f89576.html">stdex</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">base64.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> SPDX-License-Identifier: MIT</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> Copyright © 2016-2024 Amebis</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">*/</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;assert.hpp&quot;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;compat.hpp&quot;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;stream.hpp&quot;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#if defined(__GNUC__)</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#pragma GCC diagnostic push</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#pragma GCC diagnostic ignored &quot;-Wunknown-pragmas&quot;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="keyword">namespace </span>stdex</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span>{</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> base64_enc_lookup[64] = {</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="charliteral">&#39;A&#39;</span>, <span class="charliteral">&#39;B&#39;</span>, <span class="charliteral">&#39;C&#39;</span>, <span class="charliteral">&#39;D&#39;</span>, <span class="charliteral">&#39;E&#39;</span>, <span class="charliteral">&#39;F&#39;</span>, <span class="charliteral">&#39;G&#39;</span>, <span class="charliteral">&#39;H&#39;</span>, <span class="charliteral">&#39;I&#39;</span>, <span class="charliteral">&#39;J&#39;</span>, <span class="charliteral">&#39;K&#39;</span>, <span class="charliteral">&#39;L&#39;</span>, <span class="charliteral">&#39;M&#39;</span>, <span class="charliteral">&#39;N&#39;</span>, <span class="charliteral">&#39;O&#39;</span>, <span class="charliteral">&#39;P&#39;</span>,</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="charliteral">&#39;Q&#39;</span>, <span class="charliteral">&#39;R&#39;</span>, <span class="charliteral">&#39;S&#39;</span>, <span class="charliteral">&#39;T&#39;</span>, <span class="charliteral">&#39;U&#39;</span>, <span class="charliteral">&#39;V&#39;</span>, <span class="charliteral">&#39;W&#39;</span>, <span class="charliteral">&#39;X&#39;</span>, <span class="charliteral">&#39;Y&#39;</span>, <span class="charliteral">&#39;Z&#39;</span>, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;b&#39;</span>, <span class="charliteral">&#39;c&#39;</span>, <span class="charliteral">&#39;d&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;f&#39;</span>,</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="charliteral">&#39;g&#39;</span>, <span class="charliteral">&#39;h&#39;</span>, <span class="charliteral">&#39;i&#39;</span>, <span class="charliteral">&#39;j&#39;</span>, <span class="charliteral">&#39;k&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;m&#39;</span>, <span class="charliteral">&#39;n&#39;</span>, <span class="charliteral">&#39;o&#39;</span>, <span class="charliteral">&#39;p&#39;</span>, <span class="charliteral">&#39;q&#39;</span>, <span class="charliteral">&#39;r&#39;</span>, <span class="charliteral">&#39;s&#39;</span>, <span class="charliteral">&#39;t&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;v&#39;</span>,</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="charliteral">&#39;w&#39;</span>, <span class="charliteral">&#39;x&#39;</span>, <span class="charliteral">&#39;y&#39;</span>, <span class="charliteral">&#39;z&#39;</span>, <span class="charliteral">&#39;0&#39;</span>, <span class="charliteral">&#39;1&#39;</span>, <span class="charliteral">&#39;2&#39;</span>, <span class="charliteral">&#39;3&#39;</span>, <span class="charliteral">&#39;4&#39;</span>, <span class="charliteral">&#39;5&#39;</span>, <span class="charliteral">&#39;6&#39;</span>, <span class="charliteral">&#39;7&#39;</span>, <span class="charliteral">&#39;8&#39;</span>, <span class="charliteral">&#39;9&#39;</span>, <span class="charliteral">&#39;+&#39;</span>, <span class="charliteral">&#39;/&#39;</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> };</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">inline</span> <span class="keyword">const</span> uint8_t base64_dec_lookup[256] = {</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="comment">/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="comment">/* 0 */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="comment">/* 1 */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="comment">/* 2 */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="comment">/* 3 */</span> 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 64, 255, 255,</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="comment">/* 4 */</span> 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/* 5 */</span> 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="comment">/* 6 */</span> 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="comment">/* 7 */</span> 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="comment">/* 8 */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="comment">/* 9 */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="comment">/* A */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="comment">/* B */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="comment">/* C */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="comment">/* D */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/* E */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="comment">/* F */</span> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> };</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="foldopen" id="foldopen00054" data-start="{" data-end="};">
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html"> 54</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1base64__enc.html">base64_enc</a></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00060" data-start="{" data-end="}">
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html#abc6c72530634c3fea8168710ab5b1a28"> 60</a></span> <a class="code hl_function" href="classstdex_1_1base64__enc.html#abc6c72530634c3fea8168710ab5b1a28">base64_enc</a>() noexcept : <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a>(0)</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> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] = 0;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] = 0;</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] = 0;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> }</div>
</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> TR, <span class="keyword">class</span> AX&gt;</div>
<div class="foldopen" id="foldopen00076" data-start="{" data-end="}">
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html#a3f2a19f9afe1fb83200c4f7623d62a80"> 76</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__enc.html#a3f2a19f9afe1fb83200c4f7623d62a80">encode</a>(_Inout_ std::basic_string&lt;T, TR, AX&gt; &amp;out, _In_bytecount_(size) <span class="keyword">const</span> <span class="keywordtype">void</span> *data, _In_ <span class="keywordtype">size_t</span> size, _In_opt_ <span class="keywordtype">bool</span> is_last = <span class="keyword">true</span>)</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> {</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> stdex_assert(data || !size);</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="comment">// Preallocate output</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> out.reserve(out.size() + <a class="code hl_function" href="classstdex_1_1base64__enc.html#afbae8f49a0948ea7bb23d0faa8f67f21">enc_size</a>(size));</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="comment">// Convert data character by character.</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0;; i++) {</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a> &gt;= 3) {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_function" href="classstdex_1_1base64__enc.html#a3f2a19f9afe1fb83200c4f7623d62a80">encode</a>(out);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a> = 0;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (i &gt;= size)</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a>++] = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data)[i];</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// If this is the last block, flush the buffer.</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (is_last &amp;&amp; <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a>) {</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_function" href="classstdex_1_1base64__enc.html#a3f2a19f9afe1fb83200c4f7623d62a80">encode</a>(out, <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a>);</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a> = 0;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> }</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> }</div>
</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
<div class="foldopen" id="foldopen00106" data-start="{" data-end="}">
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7"> 106</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7">clear</a>() noexcept</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> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a> = 0;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> }</div>
</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="foldopen" id="foldopen00118" data-start="{" data-end="}">
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html#afbae8f49a0948ea7bb23d0faa8f67f21"> 118</a></span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classstdex_1_1base64__enc.html#afbae8f49a0948ea7bb23d0faa8f67f21">enc_size</a>(_In_ <span class="keywordtype">size_t</span> size) <span class="keyword">const</span> <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> {</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">return</span> ((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a> + size + 2)/3)*4;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> }</div>
</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> TR, <span class="keyword">class</span> AX&gt;</div>
<div class="foldopen" id="foldopen00128" data-start="{" data-end="}">
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html#a2f43e0f7787bdbea112f7eb52880d898"> 128</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__enc.html#a2f43e0f7787bdbea112f7eb52880d898">encode</a>(_Inout_ std::basic_string&lt;T, TR, AX&gt; &amp;out)</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> {</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> out += base64_enc_lookup[ <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &gt;&gt; 2 ];</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> out += base64_enc_lookup[((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &lt;&lt; 4) | (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &gt;&gt; 4)) &amp; 0x3f];</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> out += base64_enc_lookup[((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &lt;&lt; 2) | (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] &gt;&gt; 6)) &amp; 0x3f];</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> out += base64_enc_lookup[ <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] &amp; 0x3f];</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> }</div>
</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> TR, <span class="keyword">class</span> AX&gt;</div>
<div class="foldopen" id="foldopen00140" data-start="{" data-end="}">
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html#a2a64b6a49d89ddc4ca79a217faa41962"> 140</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__enc.html#a2a64b6a49d89ddc4ca79a217faa41962">encode</a>(_Inout_ std::basic_string&lt;T, TR, AX&gt; &amp;out, _In_ <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> {</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span> (size &gt; 0) {</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> out += base64_enc_lookup[<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &gt;&gt; 2];</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span> (size &gt; 1) {</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> out += base64_enc_lookup[((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &lt;&lt; 4) | (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &gt;&gt; 4)) &amp; 0x3f];</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">if</span> (size &gt; 2) {</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> out += base64_enc_lookup[((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &lt;&lt; 2) | (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] &gt;&gt; 6)) &amp; 0x3f];</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> out += base64_enc_lookup[<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] &amp; 0x3f];</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> out += base64_enc_lookup[(<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &lt;&lt; 2) &amp; 0x3f];</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> out += <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> }</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> out += base64_enc_lookup[(<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &lt;&lt; 4) &amp; 0x3f];</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> out += <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> out += <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> }</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> out += <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> out += <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> out += <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> out += <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> }</div>
</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf"> 167</a></span> uint8_t <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[3]; </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907"> 168</a></span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a>; </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> };</div>
</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
<div class="foldopen" id="foldopen00174" data-start="{" data-end="};">
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__writer.html"> 174</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1base64__writer.html">base64_writer</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1stream_1_1converter.html">stdex::stream::converter</a>, <span class="keyword">protected</span> <a class="code hl_class" href="classstdex_1_1base64__enc.html">base64_enc</a></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_class" href="classstdex_1_1base64__writer.html">base64_writer</a>(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; source, _In_ <span class="keywordtype">size_t</span> max_blocks = 19) :</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <a class="code hl_class" href="classstdex_1_1stream_1_1converter.html">stdex::stream::converter</a>(source),</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> m_max_blocks(max_blocks),</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_variable" href="classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125">m_num_blocks</a>(0)</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> {}</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> <a class="code hl_class" href="classstdex_1_1base64__writer.html">~base64_writer</a>()</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> {</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// Flush the buffer.</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a>) {</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span> (++<a class="code hl_variable" href="classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125">m_num_blocks</a> &gt; m_max_blocks) {</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> *m_source &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <a class="code hl_variable" href="classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125">m_num_blocks</a> = 1;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <a class="code hl_function" href="classstdex_1_1base64__writer.html#a54f0c38bb19f7757e42f5f76695c3a17">encode</a>(<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a>);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> }</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> }</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
<div class="foldopen" id="foldopen00195" data-start="{" data-end="}">
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__writer.html#aaca6933a48a0266e4e46cc93b03ef410"> 195</a></span> <span class="keyword">virtual</span> _Success_(<span class="keywordflow">return</span> != 0) size_t <a class="code hl_function" href="classstdex_1_1base64__writer.html#aaca6933a48a0266e4e46cc93b03ef410">write</a>(</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> _In_reads_bytes_opt_(length) const <span class="keywordtype">void</span>* data, _In_ <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> {</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> stdex_assert(data || !length);</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0;; i++) {</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a> &gt;= 3) {</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span> (++<a class="code hl_variable" href="classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125">m_num_blocks</a> &gt; m_max_blocks) {</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> *m_source &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <a class="code hl_variable" href="classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125">m_num_blocks</a> = 1;</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> }</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <a class="code hl_function" href="classstdex_1_1base64__writer.html#a54f0c38bb19f7757e42f5f76695c3a17">encode</a>();</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span> (!m_source-&gt;<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#a0295e4efe18eef2a8962680274957ac1">ok</a>()) _Unlikely_ {</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> m_state = m_source-&gt;<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#a2aa36b007017c2052a0118c1df4910d0">state</a>();</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> length - i;</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a> = 0;</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> }</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span> (i &gt;= length) {</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> m_state = stdex::stream::state_t::ok;</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">return</span> length;</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> }</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">m_num</a>++] = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(data)[i];</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> }</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div>
</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">protected</span>:</div>
<div class="foldopen" id="foldopen00224" data-start="{" data-end="}">
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__writer.html#a54f0c38bb19f7757e42f5f76695c3a17"> 224</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__writer.html#a54f0c38bb19f7757e42f5f76695c3a17">encode</a>()</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> {</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">char</span> out[4];</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> out[0] = base64_enc_lookup[ <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &gt;&gt; 2 ];</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> out[1] = base64_enc_lookup[((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &lt;&lt; 4) | (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &gt;&gt; 4)) &amp; 0x3f];</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> out[2] = base64_enc_lookup[((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &lt;&lt; 2) | (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] &gt;&gt; 6)) &amp; 0x3f];</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> out[3] = base64_enc_lookup[ <a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] &amp; 0x3f];</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> m_source-&gt;<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#af6c10ec4ab181b5ed5b061d115059b7a">write_array</a>(out, <span class="keyword">sizeof</span>(*out), _countof(out));</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> }</div>
</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div>
<div class="foldopen" id="foldopen00237" data-start="{" data-end="}">
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__writer.html#a60b74be588c41f28c88ca0d49deb53af"> 237</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__writer.html#a60b74be588c41f28c88ca0d49deb53af">encode</a>(_In_ <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> {</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">char</span> out[4];</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span> (size &gt; 0) {</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> out[0] = base64_enc_lookup[<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &gt;&gt; 2];</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span> (size &gt; 1) {</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> out[1] = base64_enc_lookup[((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &lt;&lt; 4) | (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &gt;&gt; 4)) &amp; 0x3f];</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span> (size &gt; 2) {</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> out[2] = base64_enc_lookup[((<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &lt;&lt; 2) | (<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] &gt;&gt; 6)) &amp; 0x3f];</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> out[3] = base64_enc_lookup[<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[2] &amp; 0x3f];</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> out[2] = base64_enc_lookup[(<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[1] &lt;&lt; 2) &amp; 0x3f];</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> out[3] = <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> }</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> out[1] = base64_enc_lookup[(<a class="code hl_variable" href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">m_buf</a>[0] &lt;&lt; 4) &amp; 0x3f];</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> out[2] = <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> out[3] = <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> }</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> out[0] = <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> out[1] = <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> out[2] = <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> out[3] = <span class="charliteral">&#39;=&#39;</span>;</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> }</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> m_source-&gt;<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#af6c10ec4ab181b5ed5b061d115059b7a">write_array</a>(out, <span class="keyword">sizeof</span>(*out), _countof(out));</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> }</div>
</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">size_t</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> m_max_blocks, </div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125"> 268</a></span> <a class="code hl_variable" href="classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125">m_num_blocks</a>; </div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> };</div>
</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div>
<div class="foldopen" id="foldopen00274" data-start="{" data-end="};">
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__dec.html"> 274</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1base64__dec.html">base64_dec</a></div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> {</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00280" data-start="{" data-end="}">
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__dec.html#a17d956a883e99d8d884d2cb2edade8c5"> 280</a></span> <a class="code hl_function" href="classstdex_1_1base64__dec.html#a17d956a883e99d8d884d2cb2edade8c5">base64_dec</a>() noexcept : <a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a>(0)</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> {</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[0] = 0;</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[1] = 0;</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[2] = 0;</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[3] = 0;</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> }</div>
</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> </div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> T_to, <span class="keyword">class</span> AX, <span class="keyword">class</span> T_from&gt;</div>
<div class="foldopen" id="foldopen00297" data-start="{" data-end="}">
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__dec.html#a94b0860b19c61f53208b79fcfd1ac32f"> 297</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__dec.html#a94b0860b19c61f53208b79fcfd1ac32f">decode</a>(_Inout_ std::vector&lt;T_to, AX&gt; &amp;out, _Out_ <span class="keywordtype">bool</span> &amp;is_last, _In_z_count_(size) <span class="keyword">const</span> T_from *data, _In_ <span class="keywordtype">size_t</span> size)</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> {</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> is_last = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="comment">// Trim data size to first terminator.</span></div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> k = 0; k &lt; size; k++)</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span> (!data[k]) { size = k; <span class="keywordflow">break</span>; }</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> </div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="comment">// Preallocate output</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> out.reserve(out.size() + <a class="code hl_function" href="classstdex_1_1base64__dec.html#a203f2afa5839242c1230cb22e0a65b25">dec_size</a>(size));</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> </div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0;; i++) {</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a> &gt;= 4) {</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// Buffer full; decode it.</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordtype">size_t</span> nibbles = <a class="code hl_function" href="classstdex_1_1base64__dec.html#a94b0860b19c61f53208b79fcfd1ac32f">decode</a>(out);</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span> (nibbles &lt; 3) {</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> is_last = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> }</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> }</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> </div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span> (i &gt;= size)</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> </div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">size_t</span> x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(data[i]);</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> stdex_assert(<a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a> &lt; _countof(<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>));</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">if</span> ((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[<a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a>] = x &lt; _countof(base64_dec_lookup) ? base64_dec_lookup[x] : 255) != 255)</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a>++;</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> }</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> }</div>
</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> </div>
<div class="foldopen" id="foldopen00331" data-start="{" data-end="}">
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305"> 331</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305">clear</a>() noexcept</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> {</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a> = 0;</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> }</div>
</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div>
<div class="foldopen" id="foldopen00343" data-start="{" data-end="}">
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__dec.html#a203f2afa5839242c1230cb22e0a65b25"> 343</a></span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classstdex_1_1base64__dec.html#a203f2afa5839242c1230cb22e0a65b25">dec_size</a>(_In_ <span class="keywordtype">size_t</span> size) <span class="keyword">const</span> <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> {</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">return</span> ((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a> + size + 3)/4)*3;</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> }</div>
</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> AX&gt;</div>
<div class="foldopen" id="foldopen00353" data-start="{" data-end="}">
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__dec.html#a07976a85f83981a29f9e1395d883a36d"> 353</a></span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classstdex_1_1base64__dec.html#a07976a85f83981a29f9e1395d883a36d">decode</a>(_Inout_ std::vector&lt;T, AX&gt; &amp;out)</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> {</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a> = 0;</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> out.push_back((T)(((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[0] &lt;&lt; 2) | (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[1] &gt;&gt; 4)) &amp; 0xff));</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[2] &lt; 64) {</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> out.push_back((T)(((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[1] &lt;&lt; 4) | (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[2] &gt;&gt; 2)) &amp; 0xff));</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[3] &lt; 64) {</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> out.push_back((T)(((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[2] &lt;&lt; 6) | <a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[3]) &amp; 0xff));</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">return</span> 3;</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">return</span> 2;</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> }</div>
</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103"> 369</a></span> uint8_t <a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[4]; </div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905"> 370</a></span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a>; </div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> };</div>
</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> </div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span><span class="preprocessor">#pragma warning(push)</span></div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span><span class="preprocessor">#pragma warning(disable: 26495)</span></div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div>
<div class="foldopen" id="foldopen00379" data-start="{" data-end="};">
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__reader.html"> 379</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1base64__reader.html">base64_reader</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1stream_1_1converter.html">stdex::stream::converter</a>, <span class="keyword">protected</span> <a class="code hl_class" href="classstdex_1_1base64__dec.html">base64_dec</a></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> {</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> <a class="code hl_class" href="classstdex_1_1base64__reader.html">base64_reader</a>(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; source) :</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <a class="code hl_class" href="classstdex_1_1stream_1_1converter.html">stdex::stream::converter</a>(source),</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a>(0),</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a>(0)</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> {}</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> </div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="preprocessor">#pragma warning(suppress: 6101) </span><span class="comment">// See [1] below</span></div>
<div class="foldopen" id="foldopen00389" data-start="{" data-end="}">
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__reader.html#af93e15e15612233224b39fc7324cc5ee"> 389</a></span> <span class="keyword">virtual</span> _Success_(<span class="keywordflow">return</span> != 0 || length == 0) size_t <a class="code hl_function" href="classstdex_1_1base64__reader.html#af93e15e15612233224b39fc7324cc5ee">read</a>(</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> _Out_writes_bytes_to_opt_(length, return) <span class="keywordtype">void</span>* data, _In_ <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> {</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> stdex_assert(data || !length);</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> to_read = length;;) {</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a> &gt;= to_read) {</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> memcpy(data, <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99">m_temp</a> + <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a>, to_read);</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a> += to_read;</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a> -= to_read;</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> m_state = stdex::stream::state_t::ok;</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">return</span> length;</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> }</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a>) {</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> memcpy(data, <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99">m_temp</a> + <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a>, <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a>);</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keyword">reinterpret_cast&lt;</span>uint8_t*&amp;<span class="keyword">&gt;</span>(data) += <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a>;</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> to_read -= <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a>;</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a> = 0;</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a> = 0;</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">// Read one Base64 block (4 chars)</span></div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">while</span> (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a> &lt; 4) {</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> uint8_t x;</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> *m_source &gt;&gt; x;</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">if</span> (!m_source-&gt;<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#a0295e4efe18eef2a8962680274957ac1">ok</a>()) _Unlikely_ {</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> m_state = m_source-&gt;<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#a2aa36b007017c2052a0118c1df4910d0">state</a>();</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">return</span> length - to_read; <span class="comment">// [1] Code analysis misses `length - to_read` bytes were written to data in previous loop iterations.</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> <span class="keywordflow">if</span> ((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[<a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a>] = base64_dec_lookup[x]) != 255)</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a>++;</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> }</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <a class="code hl_function" href="classstdex_1_1base64__reader.html#a523ece0190b031882162c7e4edd33fbb">decode</a>();</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len &lt; 3 &amp;&amp; to_read &gt;</a>= 3) {</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="comment">// If Base64 indicates end of data, truncate read to hint the client, end of Base64 data has been reached.</span></div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> memcpy(data, <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99">m_temp</a> + <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a>, <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a>);</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a> = 0;</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a> = 0;</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> to_read -= <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a>;</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> m_state = stdex::stream::state_t::ok;</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">return</span> length - to_read; <span class="comment">// [1] Code analysis misses `length - to_read` bytes were written to data in previous loop iterations.</span></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> }</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> }</div>
</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keyword">protected</span>:</div>
<div class="foldopen" id="foldopen00436" data-start="{" data-end="}">
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__reader.html#a523ece0190b031882162c7e4edd33fbb"> 436</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstdex_1_1base64__reader.html#a523ece0190b031882162c7e4edd33fbb">decode</a>()</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> {</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> <a class="code hl_variable" href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">m_num</a> = 0;</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a> = 0;</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99">m_temp</a>[0] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[0] &lt;&lt; 2) | (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[1] &gt;&gt; 4)) &amp; 0xff);</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[2] &lt; 64) {</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99">m_temp</a>[1] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[1] &lt;&lt; 4) | (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[2] &gt;&gt; 2)) &amp; 0xff);</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[3] &lt; 64) {</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99">m_temp</a>[2] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(((<a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[2] &lt;&lt; 6) | <a class="code hl_variable" href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">m_buf</a>[3]) &amp; 0xff);</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a> = 3;</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a> = 2;</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a> = 1;</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> }</div>
</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> </div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99"> 453</a></span> <span class="keywordtype">char</span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99">m_temp</a>[3]; </div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keywordtype">size_t</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535"> 455</a></span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">m_temp_off</a>, </div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"><a class="line" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb"> 456</a></span> <a class="code hl_variable" href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">m_temp_len</a>; </div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> };</div>
</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span><span class="preprocessor">#pragma warning(pop)</span></div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span>}</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> </div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span><span class="preprocessor">#if defined(__GNUC__)</span></div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span><span class="preprocessor">#pragma GCC diagnostic pop</span></div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html"><div class="ttname"><a href="classstdex_1_1base64__dec.html">stdex::base64_dec</a></div><div class="ttdoc">Base64 decoding session.</div><div class="ttdef"><b>Definition</b> base64.hpp:275</div></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html_a04ab92bcef2c304bc7a5d8d2a03c7905"><div class="ttname"><a href="classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905">stdex::base64_dec::m_num</a></div><div class="ttdeci">size_t m_num</div><div class="ttdoc">Number of bytes used in m_buf</div><div class="ttdef"><b>Definition</b> base64.hpp:370</div></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html_a07976a85f83981a29f9e1395d883a36d"><div class="ttname"><a href="classstdex_1_1base64__dec.html#a07976a85f83981a29f9e1395d883a36d">stdex::base64_dec::decode</a></div><div class="ttdeci">size_t decode(std::vector&lt; T, AX &gt; &amp;out)</div><div class="ttdoc">Decodes one complete internal buffer of data.</div><div class="ttdef"><b>Definition</b> base64.hpp:353</div></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html_a17d956a883e99d8d884d2cb2edade8c5"><div class="ttname"><a href="classstdex_1_1base64__dec.html#a17d956a883e99d8d884d2cb2edade8c5">stdex::base64_dec::base64_dec</a></div><div class="ttdeci">base64_dec() noexcept</div><div class="ttdoc">Constructs blank decoding session.</div><div class="ttdef"><b>Definition</b> base64.hpp:280</div></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html_a203f2afa5839242c1230cb22e0a65b25"><div class="ttname"><a href="classstdex_1_1base64__dec.html#a203f2afa5839242c1230cb22e0a65b25">stdex::base64_dec::dec_size</a></div><div class="ttdeci">size_t dec_size(size_t size) const noexcept</div><div class="ttdoc">Returns maximum decoded size.</div><div class="ttdef"><b>Definition</b> base64.hpp:343</div></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html_a94738b63789489022e0c16063b732305"><div class="ttname"><a href="classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305">stdex::base64_dec::clear</a></div><div class="ttdeci">void clear() noexcept</div><div class="ttdoc">Resets decoding session.</div><div class="ttdef"><b>Definition</b> base64.hpp:331</div></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html_a94b0860b19c61f53208b79fcfd1ac32f"><div class="ttname"><a href="classstdex_1_1base64__dec.html#a94b0860b19c61f53208b79fcfd1ac32f">stdex::base64_dec::decode</a></div><div class="ttdeci">void decode(std::vector&lt; T_to, AX &gt; &amp;out, bool &amp;is_last, const T_from *data, size_t size)</div><div class="ttdoc">Decodes one block of information, and appends it to the output.</div><div class="ttdef"><b>Definition</b> base64.hpp:297</div></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html_ab618ef5b21f33c5ed577669091c4b103"><div class="ttname"><a href="classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103">stdex::base64_dec::m_buf</a></div><div class="ttdeci">uint8_t m_buf[4]</div><div class="ttdoc">Internal buffer.</div><div class="ttdef"><b>Definition</b> base64.hpp:369</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html"><div class="ttname"><a href="classstdex_1_1base64__enc.html">stdex::base64_enc</a></div><div class="ttdoc">Base64 encoding session.</div><div class="ttdef"><b>Definition</b> base64.hpp:55</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html_a2a64b6a49d89ddc4ca79a217faa41962"><div class="ttname"><a href="classstdex_1_1base64__enc.html#a2a64b6a49d89ddc4ca79a217faa41962">stdex::base64_enc::encode</a></div><div class="ttdeci">void encode(std::basic_string&lt; T, TR, AX &gt; &amp;out, size_t size)</div><div class="ttdoc">Encodes partial internal buffer of data.</div><div class="ttdef"><b>Definition</b> base64.hpp:140</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html_a2f43e0f7787bdbea112f7eb52880d898"><div class="ttname"><a href="classstdex_1_1base64__enc.html#a2f43e0f7787bdbea112f7eb52880d898">stdex::base64_enc::encode</a></div><div class="ttdeci">void encode(std::basic_string&lt; T, TR, AX &gt; &amp;out)</div><div class="ttdoc">Encodes one complete internal buffer of data.</div><div class="ttdef"><b>Definition</b> base64.hpp:128</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html_a3f2a19f9afe1fb83200c4f7623d62a80"><div class="ttname"><a href="classstdex_1_1base64__enc.html#a3f2a19f9afe1fb83200c4f7623d62a80">stdex::base64_enc::encode</a></div><div class="ttdeci">void encode(std::basic_string&lt; T, TR, AX &gt; &amp;out, const void *data, size_t size, bool is_last=true)</div><div class="ttdoc">Encodes one block of information, and appends it to the output.</div><div class="ttdef"><b>Definition</b> base64.hpp:76</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html_a52f4cc4da6d7d7f4bad7c05a87ecd907"><div class="ttname"><a href="classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907">stdex::base64_enc::m_num</a></div><div class="ttdeci">size_t m_num</div><div class="ttdoc">Number of bytes used in m_buf</div><div class="ttdef"><b>Definition</b> base64.hpp:168</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html_a567a2a3aeda13b50e31d48ba32236adf"><div class="ttname"><a href="classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf">stdex::base64_enc::m_buf</a></div><div class="ttdeci">uint8_t m_buf[3]</div><div class="ttdoc">Internal buffer.</div><div class="ttdef"><b>Definition</b> base64.hpp:167</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html_abc6c72530634c3fea8168710ab5b1a28"><div class="ttname"><a href="classstdex_1_1base64__enc.html#abc6c72530634c3fea8168710ab5b1a28">stdex::base64_enc::base64_enc</a></div><div class="ttdeci">base64_enc() noexcept</div><div class="ttdoc">Constructs blank encoding session.</div><div class="ttdef"><b>Definition</b> base64.hpp:60</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html_afb6a85176589d9ce1f65ce6355592fe7"><div class="ttname"><a href="classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7">stdex::base64_enc::clear</a></div><div class="ttdeci">void clear() noexcept</div><div class="ttdoc">Resets encoding session.</div><div class="ttdef"><b>Definition</b> base64.hpp:106</div></div>
<div class="ttc" id="aclassstdex_1_1base64__enc_html_afbae8f49a0948ea7bb23d0faa8f67f21"><div class="ttname"><a href="classstdex_1_1base64__enc.html#afbae8f49a0948ea7bb23d0faa8f67f21">stdex::base64_enc::enc_size</a></div><div class="ttdeci">size_t enc_size(size_t size) const noexcept</div><div class="ttdoc">Returns maximum encoded size.</div><div class="ttdef"><b>Definition</b> base64.hpp:118</div></div>
<div class="ttc" id="aclassstdex_1_1base64__reader_html"><div class="ttname"><a href="classstdex_1_1base64__reader.html">stdex::base64_reader</a></div><div class="ttdoc">Converts from Base64 when reading from a stream.</div><div class="ttdef"><b>Definition</b> base64.hpp:380</div></div>
<div class="ttc" id="aclassstdex_1_1base64__reader_html_a523ece0190b031882162c7e4edd33fbb"><div class="ttname"><a href="classstdex_1_1base64__reader.html#a523ece0190b031882162c7e4edd33fbb">stdex::base64_reader::decode</a></div><div class="ttdeci">void decode()</div><div class="ttdoc">Decodes one complete internal buffer of data.</div><div class="ttdef"><b>Definition</b> base64.hpp:436</div></div>
<div class="ttc" id="aclassstdex_1_1base64__reader_html_ab92bc938edd01351e2639003f6679b99"><div class="ttname"><a href="classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99">stdex::base64_reader::m_temp</a></div><div class="ttdeci">char m_temp[3]</div><div class="ttdoc">Temporary buffer.</div><div class="ttdef"><b>Definition</b> base64.hpp:453</div></div>
<div class="ttc" id="aclassstdex_1_1base64__reader_html_ad631499f728824a166843effd7a5eedb"><div class="ttname"><a href="classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb">stdex::base64_reader::m_temp_len</a></div><div class="ttdeci">size_t m_temp_len</div><div class="ttdoc">Number of bytes of data in m_temp</div><div class="ttdef"><b>Definition</b> base64.hpp:456</div></div>
<div class="ttc" id="aclassstdex_1_1base64__reader_html_af93e15e15612233224b39fc7324cc5ee"><div class="ttname"><a href="classstdex_1_1base64__reader.html#af93e15e15612233224b39fc7324cc5ee">stdex::base64_reader::read</a></div><div class="ttdeci">virtual size_t read(_Out_writes_bytes_to_opt_(length, return) void *data, size_t length)</div><div class="ttdoc">Reads block of data from the stream.</div><div class="ttdef"><b>Definition</b> base64.hpp:389</div></div>
<div class="ttc" id="aclassstdex_1_1base64__reader_html_affd26a488ea1b5d8b23cc98be45b2535"><div class="ttname"><a href="classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535">stdex::base64_reader::m_temp_off</a></div><div class="ttdeci">size_t m_temp_off</div><div class="ttdoc">Index of data start in m_temp</div><div class="ttdef"><b>Definition</b> base64.hpp:455</div></div>
<div class="ttc" id="aclassstdex_1_1base64__writer_html"><div class="ttname"><a href="classstdex_1_1base64__writer.html">stdex::base64_writer</a></div><div class="ttdoc">Converts to Base64 when writing to a stream.</div><div class="ttdef"><b>Definition</b> base64.hpp:175</div></div>
<div class="ttc" id="aclassstdex_1_1base64__writer_html_a2529c8798fa89be544b12690411e7125"><div class="ttname"><a href="classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125">stdex::base64_writer::m_num_blocks</a></div><div class="ttdeci">size_t m_num_blocks</div><div class="ttdoc">Maximum number of Base64 blocks (4 chars) to write without a line break (SIZE_MAX no line breaks)</div><div class="ttdef"><b>Definition</b> base64.hpp:268</div></div>
<div class="ttc" id="aclassstdex_1_1base64__writer_html_a54f0c38bb19f7757e42f5f76695c3a17"><div class="ttname"><a href="classstdex_1_1base64__writer.html#a54f0c38bb19f7757e42f5f76695c3a17">stdex::base64_writer::encode</a></div><div class="ttdeci">void encode()</div><div class="ttdoc">Encodes one complete internal buffer of data.</div><div class="ttdef"><b>Definition</b> base64.hpp:224</div></div>
<div class="ttc" id="aclassstdex_1_1base64__writer_html_a60b74be588c41f28c88ca0d49deb53af"><div class="ttname"><a href="classstdex_1_1base64__writer.html#a60b74be588c41f28c88ca0d49deb53af">stdex::base64_writer::encode</a></div><div class="ttdeci">void encode(size_t size)</div><div class="ttdoc">Encodes partial internal buffer of data.</div><div class="ttdef"><b>Definition</b> base64.hpp:237</div></div>
<div class="ttc" id="aclassstdex_1_1base64__writer_html_aaca6933a48a0266e4e46cc93b03ef410"><div class="ttname"><a href="classstdex_1_1base64__writer.html#aaca6933a48a0266e4e46cc93b03ef410">stdex::base64_writer::write</a></div><div class="ttdeci">virtual size_t write(_In_reads_bytes_opt_(length) const void *data, size_t length)</div><div class="ttdoc">Writes block of data to the stream.</div><div class="ttdef"><b>Definition</b> base64.hpp:195</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a></div><div class="ttdoc">UTF-8 byte-order-mark</div><div class="ttdef"><b>Definition</b> stream.hpp:85</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html_a0295e4efe18eef2a8962680274957ac1"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html#a0295e4efe18eef2a8962680274957ac1">stdex::stream::basic::ok</a></div><div class="ttdeci">bool ok() const</div><div class="ttdoc">Returns true if the stream state is clean i.e. previous operation was successful.</div><div class="ttdef"><b>Definition</b> stream.hpp:181</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html_a2aa36b007017c2052a0118c1df4910d0"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html#a2aa36b007017c2052a0118c1df4910d0">stdex::stream::basic::state</a></div><div class="ttdeci">state_t state() const</div><div class="ttdoc">Returns stream state after last operation.</div><div class="ttdef"><b>Definition</b> stream.hpp:176</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html_af6c10ec4ab181b5ed5b061d115059b7a"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html#af6c10ec4ab181b5ed5b061d115059b7a">stdex::stream::basic::write_array</a></div><div class="ttdeci">size_t write_array(_In_reads_bytes_opt_(size *count) const void *array, size_t size, size_t count)</div><div class="ttdoc">Writes an array of data to the stream.</div><div class="ttdef"><b>Definition</b> stream.hpp:394</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1converter_html"><div class="ttname"><a href="classstdex_1_1stream_1_1converter.html">stdex::stream::converter</a></div><div class="ttdoc">Modifies data on the fly when reading from/writing to a source stream. Could also be used to modify r...</div><div class="ttdef"><b>Definition</b> stream.hpp:1023</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue May 28 2024 09:34:18 for stdex by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.11.0
</small></address>
</div><!-- doc-content -->
</body>
</html>