📄 secblock_8h-source.html
字号:
<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> <<span class="keyword">class</span> T, <span class="keyword">class</span> A = AllocatorWithCleanup<T> ><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<T, A></a> &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& operator[](size_type index)</span><a name="l00319"></a>00319 <span class="comment">// {assert(index >= 0 && index < m_size); return m_ptr[index];}</span><a name="l00320"></a>00320 <a name="l00321"></a>00321 <span class="comment">// const T& operator[](size_type index) const</span><a name="l00322"></a>00322 <span class="comment">// {assert(index >= 0 && index < 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<T, A></a> &t)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -