⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 secblock_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00259"></a><a class="code" href="class_fixed_size_allocator_with_cleanup.html#2b87955e281ef46eb2e9c7b6954e5508">00259</a>         <a class="code" href="class_fixed_size_allocator_with_cleanup.html#bcc016350706c04d7a2660659a3d19f0">size_type</a> <a class="code" href="class_fixed_size_allocator_with_cleanup.html#2b87955e281ef46eb2e9c7b6954e5508">max_size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> STDMAX(m_fallbackAllocator.max_size(), S);}<a name="l00260"></a>00260 <a name="l00261"></a>00261 <span class="keyword">private</span>:<a name="l00262"></a>00262 <span class="preprocessor">#ifdef __BORLANDC__</span><a name="l00263"></a>00263 <span class="preprocessor"></span>        T* GetAlignedArray() {<span class="keywordflow">return</span> m_array;}<a name="l00264"></a>00264         T m_array[S];<a name="l00265"></a>00265 <span class="preprocessor">#else</span><a name="l00266"></a>00266 <span class="preprocessor"></span>        T* GetAlignedArray() {<span class="keywordflow">return</span> T_Align16 ? (T*)(((byte *)m_array) + (0-(<span class="keywordtype">size_t</span>)m_array)%16) : m_array;}<a name="l00267"></a>00267         CRYPTOPP_ALIGN_DATA(8) T m_array[T_Align16 ? S+8/sizeof(T) : S];<a name="l00268"></a>00268 <span class="preprocessor">#endif</span><a name="l00269"></a>00269 <span class="preprocessor"></span>        A m_fallbackAllocator;<a name="l00270"></a>00270         <span class="keywordtype">bool</span> m_allocated;<a name="l00271"></a>00271 };<a name="l00272"></a>00272 <span class="comment"></span><a name="l00273"></a>00273 <span class="comment">//! a block of memory allocated using A</span><a name="l00274"></a>00274 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> A = AllocatorWithCleanup&lt;T&gt; &gt;<a name="l00275"></a><a class="code" href="class_sec_block.html">00275</a> <span class="keyword">class </span><a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecBlock</a><a name="l00276"></a>00276 {<a name="l00277"></a>00277 <span class="keyword">public</span>:<a name="l00278"></a><a class="code" href="class_sec_block.html#c7bc2d547feea24c569da76ada0f3786">00278</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::value_type <a class="code" href="class_sec_block.html#c7bc2d547feea24c569da76ada0f3786">value_type</a>;<a name="l00279"></a><a class="code" href="class_sec_block.html#839702c5cf360db92e8e89a18f4d1705">00279</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::pointer <a class="code" href="class_sec_block.html#839702c5cf360db92e8e89a18f4d1705">iterator</a>;<a name="l00280"></a><a class="code" href="class_sec_block.html#00be6a18e0ae7680c5071d43c3bf6348">00280</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::const_pointer <a class="code" href="class_sec_block.html#00be6a18e0ae7680c5071d43c3bf6348">const_iterator</a>;<a name="l00281"></a><a class="code" href="class_sec_block.html#c37f179bc9420b7af601df75eaed3c90">00281</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::size_type <a class="code" href="class_sec_block.html#c37f179bc9420b7af601df75eaed3c90">size_type</a>;<a name="l00282"></a>00282 <a name="l00283"></a><a class="code" href="class_sec_block.html#3f12a6f68483596916fd1893b4043816">00283</a>         <span class="keyword">explicit</span> <a class="code" href="class_sec_block.html#3f12a6f68483596916fd1893b4043816">SecBlock</a>(<a class="code" href="class_sec_block.html#c37f179bc9420b7af601df75eaed3c90">size_type</a> <a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>=0)<a name="l00284"></a>00284                 : <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>(<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>) {<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a> = <a class="code" href="class_sec_block.html#536edaa408d09201419ac3fece8d894a">m_alloc</a>.allocate(<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>, NULL);}<a name="l00285"></a><a class="code" href="class_sec_block.html#2c09b064510dead98bc0da7cd52c28e4">00285</a>         <a class="code" href="class_sec_block.html#3f12a6f68483596916fd1893b4043816">SecBlock</a>(<span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecBlock&lt;T, A&gt;</a> &amp;t)<a name="l00286"></a>00286                 : <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>(t.<a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>) {<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a> = <a class="code" href="class_sec_block.html#536edaa408d09201419ac3fece8d894a">m_alloc</a>.allocate(<a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>, NULL); memcpy_s(<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>, <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>*<span class="keyword">sizeof</span>(T), t.<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>, <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>*<span class="keyword">sizeof</span>(T));}<a name="l00287"></a><a class="code" href="class_sec_block.html#6f14bfa73d73ad3f294b905c1ea613b6">00287</a>         <a class="code" href="class_sec_block.html#3f12a6f68483596916fd1893b4043816">SecBlock</a>(<span class="keyword">const</span> T *t, <a class="code" href="class_sec_block.html#c37f179bc9420b7af601df75eaed3c90">size_type</a> len)<a name="l00288"></a>00288                 : <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>(len)<a name="l00289"></a>00289         {<a name="l00290"></a>00290                 <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a> = <a class="code" href="class_sec_block.html#536edaa408d09201419ac3fece8d894a">m_alloc</a>.allocate(len, NULL);<a name="l00291"></a>00291                 <span class="keywordflow">if</span> (t == NULL)<a name="l00292"></a>00292                         memset(<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>, 0, len*<span class="keyword">sizeof</span>(T));<a name="l00293"></a>00293                 <span class="keywordflow">else</span><a name="l00294"></a>00294                         memcpy(m_ptr, t, len*<span class="keyword">sizeof</span>(T));<a name="l00295"></a>00295         }<a name="l00296"></a>00296 <a name="l00297"></a><a class="code" href="class_sec_block.html#8f32e11d6e78528689cd31272f97b6bc">00297</a>         <a class="code" href="class_sec_block.html#8f32e11d6e78528689cd31272f97b6bc">~SecBlock</a>()<a name="l00298"></a>00298                 {<a class="code" href="class_sec_block.html#536edaa408d09201419ac3fece8d894a">m_alloc</a>.deallocate(<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>, <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>);}<a name="l00299"></a>00299 <a name="l00300"></a>00300 <span class="preprocessor">#ifndef __BORLANDC__</span><a name="l00301"></a><a class="code" href="class_sec_block.html#feedb31c4a57af2dc59a1e23cf62ba6c">00301</a> <span class="preprocessor"></span>        <a class="code" href="class_sec_block.html#feedb31c4a57af2dc59a1e23cf62ba6c">operator const void *</a>()<span class="keyword"> const</span><a name="l00302"></a>00302 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00303"></a><a class="code" href="class_sec_block.html#c6453a5b2b481544f7f77bbe3fea0a78">00303</a>         <a class="code" href="class_sec_block.html#c6453a5b2b481544f7f77bbe3fea0a78">operator void *</a>()<a name="l00304"></a>00304                 {<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00305"></a>00305 <a name="l00306"></a><a class="code" href="class_sec_block.html#b3b250c34d61acb745ba2eca9c6a61bf">00306</a>         <a class="code" href="class_sec_block.html#b3b250c34d61acb745ba2eca9c6a61bf">operator const T *</a>()<span class="keyword"> const</span><a name="l00307"></a>00307 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00308"></a>00308 <span class="preprocessor">#endif</span><a name="l00309"></a><a class="code" href="class_sec_block.html#59e2c69126c9d03a9a2e0ca0a34a2cb4">00309</a> <span class="preprocessor"></span>        <a class="code" href="class_sec_block.html#59e2c69126c9d03a9a2e0ca0a34a2cb4">operator T *</a>()<a name="l00310"></a>00310                 {<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00311"></a>00311 <a name="l00312"></a>00312 <span class="comment">//      T *operator +(size_type offset)</span><a name="l00313"></a>00313 <span class="comment">//              {return m_ptr+offset;}</span><a name="l00314"></a>00314 <a name="l00315"></a>00315 <span class="comment">//      const T *operator +(size_type offset) const</span><a name="l00316"></a>00316 <span class="comment">//              {return m_ptr+offset;}</span><a name="l00317"></a>00317 <a name="l00318"></a>00318 <span class="comment">//      T&amp; operator[](size_type index)</span><a name="l00319"></a>00319 <span class="comment">//              {assert(index &gt;= 0 &amp;&amp; index &lt; m_size); return m_ptr[index];}</span><a name="l00320"></a>00320 <a name="l00321"></a>00321 <span class="comment">//      const T&amp; operator[](size_type index) const</span><a name="l00322"></a>00322 <span class="comment">//              {assert(index &gt;= 0 &amp;&amp; index &lt; m_size); return m_ptr[index];}</span><a name="l00323"></a>00323 <a name="l00324"></a><a class="code" href="class_sec_block.html#11a05906688172579cd3520816799446">00324</a>         <a class="code" href="class_sec_block.html#839702c5cf360db92e8e89a18f4d1705">iterator</a> <a class="code" href="class_sec_block.html#11a05906688172579cd3520816799446">begin</a>()<a name="l00325"></a>00325                 {<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00326"></a><a class="code" href="class_sec_block.html#18351db729daac209ce017661a0cf6e8">00326</a>         <a class="code" href="class_sec_block.html#00be6a18e0ae7680c5071d43c3bf6348">const_iterator</a> <a class="code" href="class_sec_block.html#11a05906688172579cd3520816799446">begin</a>()<span class="keyword"> const</span><a name="l00327"></a>00327 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00328"></a><a class="code" href="class_sec_block.html#26d88ba73b5da0f5dd4ab87ce6345d8f">00328</a>         <a class="code" href="class_sec_block.html#839702c5cf360db92e8e89a18f4d1705">iterator</a> <a class="code" href="class_sec_block.html#26d88ba73b5da0f5dd4ab87ce6345d8f">end</a>()<a name="l00329"></a>00329                 {<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>+<a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>;}<a name="l00330"></a><a class="code" href="class_sec_block.html#c47c5182bac200930228ef5666b35336">00330</a>         <a class="code" href="class_sec_block.html#00be6a18e0ae7680c5071d43c3bf6348">const_iterator</a> <a class="code" href="class_sec_block.html#26d88ba73b5da0f5dd4ab87ce6345d8f">end</a>()<span class="keyword"> const</span><a name="l00331"></a>00331 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>+<a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>;}<a name="l00332"></a>00332 <a name="l00333"></a><a class="code" href="class_sec_block.html#42ad7c28810297ca50b2411284876845">00333</a>         <span class="keyword">typename</span> A::pointer <a class="code" href="class_sec_block.html#42ad7c28810297ca50b2411284876845">data</a>() {<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00334"></a><a class="code" href="class_sec_block.html#cc465230b3c6849565a19d1c7d7f5c1f">00334</a>         <span class="keyword">typename</span> A::const_pointer <a class="code" href="class_sec_block.html#42ad7c28810297ca50b2411284876845">data</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00335"></a>00335 <a name="l00336"></a><a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">00336</a>         <a class="code" href="class_sec_block.html#c37f179bc9420b7af601df75eaed3c90">size_type</a> <a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>;}<a name="l00337"></a><a class="code" href="class_sec_block.html#cf162565508e31bfe5a2eb3946411829">00337</a>         <span class="keywordtype">bool</span> <a class="code" href="class_sec_block.html#cf162565508e31bfe5a2eb3946411829">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a> == 0;}<a name="l00338"></a>00338 <a name="l00339"></a><a class="code" href="class_sec_block.html#5565f51350846fb7224720c403674216">00339</a>         byte * <a class="code" href="class_sec_block.html#5565f51350846fb7224720c403674216">BytePtr</a>() {<span class="keywordflow">return</span> (byte *)<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00340"></a><a class="code" href="class_sec_block.html#565f381f0b133268b77d770bfcfc9a09">00340</a>         <span class="keyword">const</span> byte * <a class="code" href="class_sec_block.html#5565f51350846fb7224720c403674216">BytePtr</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (<span class="keyword">const</span> byte *)<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>;}<a name="l00341"></a><a class="code" href="class_sec_block.html#93e1256d8021ba4ab9007ea4e19ae8c2">00341</a>         <a class="code" href="class_sec_block.html#c37f179bc9420b7af601df75eaed3c90">size_type</a> <a class="code" href="class_sec_block.html#93e1256d8021ba4ab9007ea4e19ae8c2">SizeInBytes</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>*<span class="keyword">sizeof</span>(T);}<a name="l00342"></a>00342 <span class="comment"></span><a name="l00343"></a>00343 <span class="comment">        //! set contents and size</span><a name="l00344"></a><a class="code" href="class_sec_block.html#2cf5dc5e31c63eb927f935af6104f36a">00344</a> <span class="comment"></span>        <span class="keywordtype">void</span> <a class="code" href="class_sec_block.html#2cf5dc5e31c63eb927f935af6104f36a" title="set contents and size">Assign</a>(<span class="keyword">const</span> T *t, <a class="code" href="class_sec_block.html#c37f179bc9420b7af601df75eaed3c90">size_type</a> len)<a name="l00345"></a>00345         {<a name="l00346"></a>00346                 <a class="code" href="class_sec_block.html#90d46e577c951d81a2d25a4742a3e979" title="change size, without preserving contents">New</a>(len);<a name="l00347"></a>00347                 memcpy_s(<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>, <a class="code" href="class_sec_block.html#eed7a648f929f43b676b7a346b1373dd">m_size</a>*<span class="keyword">sizeof</span>(T), t, len*<span class="keyword">sizeof</span>(T));<a name="l00348"></a>00348         }<a name="l00349"></a>00349 <span class="comment"></span><a name="l00350"></a>00350 <span class="comment">        //! copy contents and size from another SecBlock</span><a name="l00351"></a><a class="code" href="class_sec_block.html#309d571ffb1b7d58185a8309ca58e6b2">00351</a> <span class="comment"></span>        <span class="keywordtype">void</span> <a class="code" href="class_sec_block.html#2cf5dc5e31c63eb927f935af6104f36a" title="set contents and size">Assign</a>(<span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecBlock&lt;T, A&gt;</a> &amp;t)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -