Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 4bc66056a634db26a1f4d0845dc41ca6 > files > 11927

mrpt-doc-0.9.5-0.1.20110925svn2670.fc16.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>safe_pointers.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> &gt; <b>C++ reference</b> </div>
<div align="right">
<a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a>
</div>
<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
          <div class="left">
            <form id="FSearchBox" action="search.php" method="get">
              <img id="MSearchSelect" src="search/mag.png" alt=""/>
              <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" 
                     onfocus="searchBox.OnSearchFieldFocus(true)" 
                     onblur="searchBox.OnSearchFieldFocus(false)"/>
            </form>
          </div><div class="right"></div>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">safe_pointers.h</div>  </div>
</div>
<div class="contents">
<a href="safe__pointers_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +---------------------------------------------------------------------------+</span>
<a name="l00002"></a>00002 <span class="comment">   |          The Mobile Robot Programming Toolkit (MRPT) C++ library          |</span>
<a name="l00003"></a>00003 <span class="comment">   |                                                                           |</span>
<a name="l00004"></a>00004 <span class="comment">   |                       http://www.mrpt.org/                                |</span>
<a name="l00005"></a>00005 <span class="comment">   |                                                                           |</span>
<a name="l00006"></a>00006 <span class="comment">   |   Copyright (C) 2005-2011  University of Malaga                           |</span>
<a name="l00007"></a>00007 <span class="comment">   |                                                                           |</span>
<a name="l00008"></a>00008 <span class="comment">   |    This software was written by the Machine Perception and Intelligent    |</span>
<a name="l00009"></a>00009 <span class="comment">   |      Robotics Lab, University of Malaga (Spain).                          |</span>
<a name="l00010"></a>00010 <span class="comment">   |    Contact: Jose-Luis Blanco  &lt;jlblanco@ctima.uma.es&gt;                     |</span>
<a name="l00011"></a>00011 <span class="comment">   |                                                                           |</span>
<a name="l00012"></a>00012 <span class="comment">   |  This file is part of the MRPT project.                                   |</span>
<a name="l00013"></a>00013 <span class="comment">   |                                                                           |</span>
<a name="l00014"></a>00014 <span class="comment">   |     MRPT is free software: you can redistribute it and/or modify          |</span>
<a name="l00015"></a>00015 <span class="comment">   |     it under the terms of the GNU General Public License as published by  |</span>
<a name="l00016"></a>00016 <span class="comment">   |     the Free Software Foundation, either version 3 of the License, or     |</span>
<a name="l00017"></a>00017 <span class="comment">   |     (at your option) any later version.                                   |</span>
<a name="l00018"></a>00018 <span class="comment">   |                                                                           |</span>
<a name="l00019"></a>00019 <span class="comment">   |   MRPT is distributed in the hope that it will be useful,                 |</span>
<a name="l00020"></a>00020 <span class="comment">   |     but WITHOUT ANY WARRANTY; without even the implied warranty of        |</span>
<a name="l00021"></a>00021 <span class="comment">   |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |</span>
<a name="l00022"></a>00022 <span class="comment">   |     GNU General Public License for more details.                          |</span>
<a name="l00023"></a>00023 <span class="comment">   |                                                                           |</span>
<a name="l00024"></a>00024 <span class="comment">   |     You should have received a copy of the GNU General Public License     |</span>
<a name="l00025"></a>00025 <span class="comment">   |     along with MRPT.  If not, see &lt;http://www.gnu.org/licenses/&gt;.         |</span>
<a name="l00026"></a>00026 <span class="comment">   |                                                                           |</span>
<a name="l00027"></a>00027 <span class="comment">   +---------------------------------------------------------------------------+ */</span>
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef  safe_pointers_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define  safe_pointers_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;mrpt/config.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;<a class="code" href="utils__defs_8h.html">mrpt/utils/utils_defs.h</a>&gt;</span>
<a name="l00033"></a>00033 
<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------</span>
<a name="l00035"></a>00035 <span class="comment">        Class</span>
<a name="l00036"></a>00036 <span class="comment">  ---------------------------------------------------------------*/</span>
<a name="l00037"></a>00037 <span class="keyword">namespace </span>mrpt
<a name="l00038"></a>00038 {
<a name="l00039"></a>00039 <span class="keyword">namespace </span>utils
<a name="l00040"></a>00040 {<span class="comment"></span>
<a name="l00041"></a>00041 <span class="comment">        /** A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.</span>
<a name="l00042"></a>00042 <span class="comment">          * This class does not keep any reference count nor automatically destroy the pointed data.</span>
<a name="l00043"></a>00043 <span class="comment">          * \sa CReferencedMemBlock, safe_ptr, non_copiable_ptr, copiable_NULL_ptr</span>
<a name="l00044"></a>00044 <span class="comment">          */</span>
<a name="l00045"></a>00045         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00046"></a>00046         <span class="keyword">struct </span>safe_ptr_basic
<a name="l00047"></a>00047         {
<a name="l00048"></a>00048         <span class="keyword">protected</span>:
<a name="l00049"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">00049</a>                 T *<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>;
<a name="l00050"></a>00050 
<a name="l00051"></a>00051         <span class="keyword">public</span>:
<a name="l00052"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a6985880b6f2ec1f2d4af615641e4a700">00052</a>                 <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a6985880b6f2ec1f2d4af615641e4a700">safe_ptr_basic</a>() : <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>(NULL) { }
<a name="l00053"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#af751dd3ea0dcf8ca4d17fb3191d5cef0">00053</a>                 <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#af751dd3ea0dcf8ca4d17fb3191d5cef0">safe_ptr_basic</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html">safe_ptr_basic&lt;T&gt;</a> &amp;o) : <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>(o.<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>) { }
<a name="l00054"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a995b5357eda6dbb12ce0af7087b5c171">00054</a>                 <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a995b5357eda6dbb12ce0af7087b5c171">safe_ptr_basic</a>(<span class="keyword">const</span> T* p) : <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>(const_cast&lt;T*&gt;(p)) { }
<a name="l00055"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a2947bb921d97b7967cd8718f641f7751">00055</a>                 <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html">safe_ptr_basic&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a2947bb921d97b7967cd8718f641f7751">operator =</a>(T * p) { <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a> = p; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00056"></a>00056 
<a name="l00057"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a43dee6e8201a9cdf3ec37aeff4abd68b">00057</a>                 <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html">safe_ptr_basic&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a2947bb921d97b7967cd8718f641f7751">operator =</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html">safe_ptr_basic&lt;T&gt;</a>&amp;o)
<a name="l00058"></a>00058                 {
<a name="l00059"></a>00059                         <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a> = o.<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>;
<a name="l00060"></a>00060                         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00061"></a>00061                 }
<a name="l00062"></a>00062 
<a name="l00063"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a9e2a6af3c93b64c5e8cc5f02caa9286d">00063</a>                 <span class="keyword">virtual</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a9e2a6af3c93b64c5e8cc5f02caa9286d">~safe_ptr_basic</a>() {  }
<a name="l00064"></a>00064 
<a name="l00065"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a6826fc13ee9db6e4ce121f342a295d84">00065</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a6826fc13ee9db6e4ce121f342a295d84">operator == </a>( <span class="keyword">const</span> T *o )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> o==<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>; }
<a name="l00066"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#ac6539b89eb19e8440445060320398ccc">00066</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a6826fc13ee9db6e4ce121f342a295d84">operator == </a>( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html">safe_ptr_basic&lt;T&gt;</a> &amp;o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o.<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>==<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>; }
<a name="l00067"></a>00067 
<a name="l00068"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a3a1d2f8320a2ea307e06ae0d0faa2e6e">00068</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a3a1d2f8320a2ea307e06ae0d0faa2e6e">operator != </a>( <span class="keyword">const</span> T *o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o!=<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>; }
<a name="l00069"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a6168dc51706472d15a00389b521b0fa0">00069</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a3a1d2f8320a2ea307e06ae0d0faa2e6e">operator != </a>( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html">safe_ptr_basic&lt;T&gt;</a> &amp;o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o.<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>!=<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>; }
<a name="l00070"></a>00070 
<a name="l00071"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#abbc2461cea8bedbf973d7b721f89564f">00071</a>                 T*&amp; <span class="keyword">get</span>() { <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>; }
<a name="l00072"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#af6c0df8b04dfdef18a228c79a384e74f">00072</a>                 <span class="keyword">const</span> T* <span class="keyword">get</span>()<span class="keyword">const</span> { <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>; }
<a name="l00073"></a>00073 
<a name="l00074"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a397257db0944ab826598c37edbf018ab">00074</a>                 T *&amp; <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a397257db0944ab826598c37edbf018ab">operator -&gt;</a>() { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>; }
<a name="l00075"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a34b2fcd146c2ff91e8b95a8e991daff8">00075</a>                 <span class="keyword">const</span> T * <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a397257db0944ab826598c37edbf018ab">operator -&gt;</a>()<span class="keyword"> const  </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html#a99c3727aa7ad580b37d261831f9d26c3">ptr</a>; }
<a name="l00076"></a>00076         };
<a name="l00077"></a>00077 <span class="comment"></span>
<a name="l00078"></a>00078 <span class="comment">        /** A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.</span>
<a name="l00079"></a>00079 <span class="comment">          * This class does not keep any reference count nor automatically destroy the pointed data.</span>
<a name="l00080"></a>00080 <span class="comment">          * \sa CReferencedMemBlock, safe_ptr, non_copiable_ptr, copiable_NULL_ptr</span>
<a name="l00081"></a>00081 <span class="comment">          */</span>
<a name="l00082"></a>00082         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00083"></a>00083         <span class="keyword">struct </span>safe_ptr : safe_ptr_basic&lt;T&gt;
<a name="l00084"></a>00084         {
<a name="l00085"></a>00085         <span class="keyword">public</span>:
<a name="l00086"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a6f2b1a10cbeace244895957ef8fc825a">00086</a>                 <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a6f2b1a10cbeace244895957ef8fc825a">safe_ptr</a>() : <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic</a>&lt;T&gt;() { }
<a name="l00087"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a0640232e227dc71fa64de5f372e6dc83">00087</a>                 <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a0640232e227dc71fa64de5f372e6dc83">safe_ptr</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr&lt;T&gt;</a> &amp;o) : <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic</a>&lt;T&gt;(o) { }
<a name="l00088"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a5ccd8aac9df910f47d1a68c5e5fd47de">00088</a>                 <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a5ccd8aac9df910f47d1a68c5e5fd47de">safe_ptr</a>(<span class="keyword">const</span> T* p) : <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic</a>&lt;T&gt;(p) { }
<a name="l00089"></a>00089 
<a name="l00090"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#aa7367704c528f514fb499cb99fa4b57d">00090</a>                 <span class="keyword">virtual</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#aa7367704c528f514fb499cb99fa4b57d">~safe_ptr</a>() { }
<a name="l00091"></a>00091 
<a name="l00092"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a82cd84ea007505ec6b8f24a76a91faff">00092</a>                 T &amp; <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a82cd84ea007505ec6b8f24a76a91faff">operator *</a>() { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> *<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;T&gt;::ptr</a>; }
<a name="l00093"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#ad4d00b5f5d4db75996397434596d11e3">00093</a>                 <span class="keyword">const</span> T &amp; <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a82cd84ea007505ec6b8f24a76a91faff">operator *</a>()<span class="keyword"> const  </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> *<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;T&gt;::ptr</a>; }
<a name="l00094"></a>00094 
<a name="l00095"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a4987d04bae464dd8091456fc171d6447">00095</a>                 T &amp; <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a4987d04bae464dd8091456fc171d6447">operator []</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> &amp;i) { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;T&gt;::ptr</a>[i]; }
<a name="l00096"></a><a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a319e11243a980b4364dca2c165444c3c">00096</a>                 <span class="keyword">const</span> T &amp; <a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html#a4987d04bae464dd8091456fc171d6447">operator []</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> &amp;i)<span class="keyword"> const </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;T&gt;::ptr</a>[i]; }
<a name="l00097"></a>00097         };
<a name="l00098"></a>00098 
<a name="l00099"></a>00099 <span class="comment"></span>
<a name="l00100"></a>00100 <span class="comment">        /** A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtime if a copy is attempted.</span>
<a name="l00101"></a>00101 <span class="comment">          * \sa CReferencedMemBlock, safe_ptr, non_copiable_ptr, copiable_NULL_ptr</span>
<a name="l00102"></a>00102 <span class="comment">          */</span>
<a name="l00103"></a>00103         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00104"></a>00104         <span class="keyword">struct </span>non_copiable_ptr_basic
<a name="l00105"></a>00105         {
<a name="l00106"></a>00106         <span class="keyword">protected</span>:
<a name="l00107"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">00107</a>                 T *<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>;
<a name="l00108"></a>00108 
<a name="l00109"></a>00109         <span class="keyword">public</span>:
<a name="l00110"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#ad23f7f8874d542de545ad89d4a45c4cc">00110</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#ad23f7f8874d542de545ad89d4a45c4cc">non_copiable_ptr_basic</a>() : <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>(NULL) { }
<a name="l00111"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a931d7aabf75db8c2c5ac9c044632b887">00111</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a931d7aabf75db8c2c5ac9c044632b887">non_copiable_ptr_basic</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html">non_copiable_ptr_basic&lt;T&gt;</a> &amp;o) : <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>(NULL) { <a class="code" href="mrpt__macros_8h.html#aaa3f404ea85a6575a7139f8d101370ba">THROW_EXCEPTION</a>(<span class="stringliteral">&quot;Pointer non-copiable...&quot;</span>); }
<a name="l00112"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a139a1498f5371c84b7931d2f8ce9f719">00112</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a139a1498f5371c84b7931d2f8ce9f719">non_copiable_ptr_basic</a>(<span class="keyword">const</span> T* p) : <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>(const_cast&lt;T*&gt;(p)) { }
<a name="l00113"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aa1af734ec17c2c2ccd65ab4b40113265">00113</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html">non_copiable_ptr_basic&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aa1af734ec17c2c2ccd65ab4b40113265">operator =</a>(T * p) { <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a> = p; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00114"></a>00114 
<a name="l00115"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#ad07df3b0bc844f5a913e4513177fb460">00115</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html">non_copiable_ptr_basic&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aa1af734ec17c2c2ccd65ab4b40113265">operator =</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html">non_copiable_ptr_basic&lt;T&gt;</a>&amp;o)
<a name="l00116"></a>00116                 { <a class="code" href="mrpt__macros_8h.html#aaa3f404ea85a6575a7139f8d101370ba">THROW_EXCEPTION</a>(<span class="stringliteral">&quot;Pointer non-copiable...&quot;</span>); }
<a name="l00117"></a>00117 <span class="comment"></span>
<a name="l00118"></a>00118 <span class="comment">                /** This method can change the pointer, since the change is made explicitly, not through copy operators transparent to the user. */</span>
<a name="l00119"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a6d094bceedd77f9a7913c1bec995fbc5">00119</a>                 <span class="keywordtype">void</span> <span class="keyword">set</span>( <span class="keyword">const</span> T* p ) { <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a> = <span class="keyword">const_cast&lt;</span>T*<span class="keyword">&gt;</span>(p); }
<a name="l00120"></a>00120 
<a name="l00121"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#ab3e85e1766a701074df28ea70d08b1a8">00121</a>                 <span class="keyword">virtual</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#ab3e85e1766a701074df28ea70d08b1a8">~non_copiable_ptr_basic</a>() {  }
<a name="l00122"></a>00122 
<a name="l00123"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aee4095fcebd7db8805a8fcce1adf8f64">00123</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aee4095fcebd7db8805a8fcce1adf8f64">operator == </a>( <span class="keyword">const</span> T *o )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> o==<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00124"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a0163b1010b96bd2d6ca8c40d81b73963">00124</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aee4095fcebd7db8805a8fcce1adf8f64">operator == </a>( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html">non_copiable_ptr_basic&lt;T&gt;</a> &amp;o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o.<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>==<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00125"></a>00125 
<a name="l00126"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aca6a1623737f38f892a812381ac8d043">00126</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aca6a1623737f38f892a812381ac8d043">operator != </a>( <span class="keyword">const</span> T *o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o!=<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00127"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#ab6bd7b2c044021294d625f86efce36e4">00127</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aca6a1623737f38f892a812381ac8d043">operator != </a>( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html">non_copiable_ptr_basic&lt;T&gt;</a> &amp;o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o.<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>!=<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00128"></a>00128 
<a name="l00129"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#ab3b8e5ee20a16dac0fe5ffc3ed8945e0">00129</a>                 T*&amp; <span class="keyword">get</span>() { <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00130"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aef600206a52cc5c7115ba25a898f834d">00130</a>                 <span class="keyword">const</span> T* <span class="keyword">get</span>()<span class="keyword">const</span> { <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00131"></a>00131 
<a name="l00132"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aa734f4dce01fb55db6912befb65c8b52">00132</a>                 T** <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#aa734f4dce01fb55db6912befb65c8b52">getPtrToPtr</a>() { <span class="keywordflow">return</span> &amp;<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00133"></a>00133 
<a name="l00134"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a8b0478cd63d7c32985e3f9199f061ae6">00134</a>                 T *&amp; <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a8b0478cd63d7c32985e3f9199f061ae6">operator -&gt;</a>() { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00135"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a1fbe980442b11521ccc4aad33fed711b">00135</a>                 <span class="keyword">const</span> T * <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a8b0478cd63d7c32985e3f9199f061ae6">operator -&gt;</a>()<span class="keyword"> const  </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html#a3032a653889795784e235bac6c4043f1">ptr</a>; }
<a name="l00136"></a>00136         };
<a name="l00137"></a>00137 <span class="comment"></span>
<a name="l00138"></a>00138 <span class="comment">        /** A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtime if a copy is attempted.</span>
<a name="l00139"></a>00139 <span class="comment">          * \sa CReferencedMemBlock, safe_ptr, non_copiable_ptr, copiable_NULL_ptr</span>
<a name="l00140"></a>00140 <span class="comment">          */</span>
<a name="l00141"></a>00141         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00142"></a>00142         <span class="keyword">struct </span>non_copiable_ptr : non_copiable_ptr_basic&lt;T&gt;
<a name="l00143"></a>00143         {
<a name="l00144"></a>00144         <span class="keyword">public</span>:
<a name="l00145"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#ad3cf177b5c18f2a9a9ea4cc2c2ff7310">00145</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#ad3cf177b5c18f2a9a9ea4cc2c2ff7310">non_copiable_ptr</a>() : <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic</a>&lt;T&gt;() { }
<a name="l00146"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#a0e04d00a094a882fc5678667e97e1b80">00146</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#a0e04d00a094a882fc5678667e97e1b80">non_copiable_ptr</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr&lt;T&gt;</a> &amp;o) : <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic</a>&lt;T&gt;(o) { }
<a name="l00147"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#aad9364072cbffacdfd4d01ab13410d3b">00147</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#aad9364072cbffacdfd4d01ab13410d3b">non_copiable_ptr</a>(<span class="keyword">const</span> T* p) : <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic</a>&lt;T&gt;(p) { }
<a name="l00148"></a>00148 
<a name="l00149"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#a5841d2b6f9814db17d14358500b2dcf8">00149</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#a5841d2b6f9814db17d14358500b2dcf8">operator =</a>(<span class="keyword">const</span> T* p) { <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a> = <span class="keyword">const_cast&lt;</span>T*<span class="keyword">&gt;</span>(p); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00150"></a>00150 
<a name="l00151"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#aa6690aadf43306da5f722e78418f5ae5">00151</a>                 <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#a5841d2b6f9814db17d14358500b2dcf8">operator =</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr&lt;T&gt;</a>&amp;o)
<a name="l00152"></a>00152                 { <a class="code" href="mrpt__macros_8h.html#aaa3f404ea85a6575a7139f8d101370ba">THROW_EXCEPTION</a>(<span class="stringliteral">&quot;Pointer non-copiable...&quot;</span>); }
<a name="l00153"></a>00153 
<a name="l00154"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#ae815fdf9a782ccd4bd1b99164fbf6757">00154</a>                 <span class="keyword">virtual</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#ae815fdf9a782ccd4bd1b99164fbf6757">~non_copiable_ptr</a>() {  }
<a name="l00155"></a>00155 
<a name="l00156"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#abd2a78a41cdebcdcc40c6155c69c636f">00156</a>                 T &amp; <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#abd2a78a41cdebcdcc40c6155c69c636f">operator *</a>() { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> *<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a>; }
<a name="l00157"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#a52afd306e5dffc6a053e92e1ea35325c">00157</a>                 <span class="keyword">const</span> T &amp; <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#abd2a78a41cdebcdcc40c6155c69c636f">operator *</a>()<span class="keyword"> const  </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> *<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a>; }
<a name="l00158"></a>00158 
<a name="l00159"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#ae479be94e00396af908c67e2379c6cbf">00159</a>                 T &amp; <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#ae479be94e00396af908c67e2379c6cbf">operator []</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> &amp;i) { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a>[i]; }
<a name="l00160"></a><a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#a8a2e07af469b993374716fc7f55a4859">00160</a>                 <span class="keyword">const</span> T &amp; <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr.html#ae479be94e00396af908c67e2379c6cbf">operator []</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> &amp;i)<span class="keyword"> const </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html" title="A wrapper class for pointers that can NOT be copied with &quot;=&quot; operator, raising an exception at runtim...">non_copiable_ptr_basic&lt;T&gt;::ptr</a>[i]; }
<a name="l00161"></a>00161         };
<a name="l00162"></a>00162 
<a name="l00163"></a>00163 <span class="comment"></span>
<a name="l00164"></a>00164 <span class="comment">        /** A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy.</span>
<a name="l00165"></a>00165 <span class="comment">          * \sa CReferencedMemBlock, safe_ptr, non_copiable_ptr, copiable_NULL_ptr</span>
<a name="l00166"></a>00166 <span class="comment">          */</span>
<a name="l00167"></a>00167         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00168"></a>00168         <span class="keyword">struct </span>copiable_NULL_ptr_basic
<a name="l00169"></a>00169         {
<a name="l00170"></a>00170         <span class="keyword">protected</span>:
<a name="l00171"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">00171</a>                 T *<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>;
<a name="l00172"></a>00172 
<a name="l00173"></a>00173         <span class="keyword">public</span>:
<a name="l00174"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a4ea41b77140fd1c68dedd6a4fc0e738e">00174</a>                 <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a4ea41b77140fd1c68dedd6a4fc0e738e">copiable_NULL_ptr_basic</a>() : <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>(NULL) { }
<a name="l00175"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a4fb2369f535ed575eda15f7a34ff8496">00175</a>                 <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a4fb2369f535ed575eda15f7a34ff8496">copiable_NULL_ptr_basic</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html">copiable_NULL_ptr_basic&lt;T&gt;</a> &amp;o) : <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>(NULL) {  }
<a name="l00176"></a>00176 
<a name="l00177"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab5135cbf13710f63b841f9a6c3984dbf">00177</a>                 <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html">copiable_NULL_ptr_basic&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab5135cbf13710f63b841f9a6c3984dbf">operator =</a>(T * p) { <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>=p; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00178"></a>00178 
<a name="l00179"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a169634a19fad8ab14881245206506c41">00179</a>                 <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html">copiable_NULL_ptr_basic&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab5135cbf13710f63b841f9a6c3984dbf">operator =</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html">copiable_NULL_ptr_basic&lt;T&gt;</a>&amp;o) { <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>=NULL; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00180"></a>00180 
<a name="l00181"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a30bc852854318916ee2a5588f4193629">00181</a>                 <span class="keyword">virtual</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a30bc852854318916ee2a5588f4193629">~copiable_NULL_ptr_basic</a>() {  }
<a name="l00182"></a>00182 
<a name="l00183"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab504d3eae73428d416b03e86e41d2d0d">00183</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab504d3eae73428d416b03e86e41d2d0d">operator == </a>( <span class="keyword">const</span> T *o )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> o==<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>; }
<a name="l00184"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#aad259beaa4057810682a93977d655332">00184</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab504d3eae73428d416b03e86e41d2d0d">operator == </a>( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html">copiable_NULL_ptr_basic&lt;T&gt;</a> &amp;o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o.<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>==<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>; }
<a name="l00185"></a>00185 
<a name="l00186"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a2fac554623f5f767efc9bf19d01517c5">00186</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a2fac554623f5f767efc9bf19d01517c5">operator != </a>( <span class="keyword">const</span> T *o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o!=<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>; }
<a name="l00187"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#af7544510d1c6292facfbf83f5e33cdf0">00187</a>                 <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a2fac554623f5f767efc9bf19d01517c5">operator != </a>( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html">copiable_NULL_ptr_basic&lt;T&gt;</a> &amp;o )<span class="keyword">const </span>{ <span class="keywordflow">return</span> o.<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>!=<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>; }
<a name="l00188"></a>00188 
<a name="l00189"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a69ac8a24159735bb2ce7206b26216e4b">00189</a>                 T*&amp; <span class="keyword">get</span>() { <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>; }
<a name="l00190"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ae8a12ebf9f11a481d33e9e8ea77dff65">00190</a>                 <span class="keyword">const</span> T*&amp; <span class="keyword">get</span>()<span class="keyword">const</span> { <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>; }
<a name="l00191"></a>00191 
<a name="l00192"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab6f44c4b3e19ddd4a1611fd3b0c2af03">00192</a>                 T *&amp; <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab6f44c4b3e19ddd4a1611fd3b0c2af03">operator -&gt;</a>() { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>; }
<a name="l00193"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ac16a95ff0c26070680aab31d02e5f0f5">00193</a>                 <span class="keyword">const</span> T *&amp; <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#ab6f44c4b3e19ddd4a1611fd3b0c2af03">operator -&gt;</a>()<span class="keyword"> const  </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html#a14cc6410739d21ecdffc576ae4dc67c3">ptr</a>; }
<a name="l00194"></a>00194         };
<a name="l00195"></a>00195 <span class="comment"></span>
<a name="l00196"></a>00196 <span class="comment">        /** A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the new copy.</span>
<a name="l00197"></a>00197 <span class="comment">          * \sa CReferencedMemBlock, safe_ptr, non_copiable_ptr, copiable_NULL_ptr</span>
<a name="l00198"></a>00198 <span class="comment">          */</span>
<a name="l00199"></a>00199         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00200"></a>00200         <span class="keyword">struct </span>copiable_NULL_ptr : copiable_NULL_ptr_basic&lt;T&gt;
<a name="l00201"></a>00201         {
<a name="l00202"></a>00202         <span class="keyword">public</span>:
<a name="l00203"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#a2668f53a8667d5e6f2681ed22f5d273b">00203</a>                 <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#a2668f53a8667d5e6f2681ed22f5d273b">copiable_NULL_ptr</a>() : <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic</a>&lt;T&gt;() { }
<a name="l00204"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#aad2579839daa01f63df9115898b1fe1d">00204</a>                 <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#aad2579839daa01f63df9115898b1fe1d">copiable_NULL_ptr</a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the new ...">copiable_NULL_ptr&lt;T&gt;</a> &amp;o) : <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic</a>&lt;T&gt;(o) { }
<a name="l00205"></a>00205 
<a name="l00206"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#a9c9d541be10ddd5bf0ecd8dc47a91975">00206</a>                 <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the new ...">copiable_NULL_ptr&lt;T&gt;</a> &amp;<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#a9c9d541be10ddd5bf0ecd8dc47a91975">operator =</a>(T * p) { <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>=p; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00207"></a>00207 
<a name="l00208"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#aa90798622b249948c81b4ba30cf86d54">00208</a>                 <span class="keyword">virtual</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#aa90798622b249948c81b4ba30cf86d54">~copiable_NULL_ptr</a>() { }
<a name="l00209"></a>00209 
<a name="l00210"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#aae0a93d19f3b2ed8cc6db2b5efd5eae6">00210</a>                 T &amp; <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#aae0a93d19f3b2ed8cc6db2b5efd5eae6">operator *</a>() { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> *<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>; }
<a name="l00211"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#a17ec1bdbecb9465d4ca6d002c296e2ac">00211</a>                 <span class="keyword">const</span> T &amp; <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#aae0a93d19f3b2ed8cc6db2b5efd5eae6">operator *</a>()<span class="keyword"> const  </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> *<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>; }
<a name="l00212"></a>00212 
<a name="l00213"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#ab099993ac6385ce999bcefc5dea9353c">00213</a>                 T &amp; <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#ab099993ac6385ce999bcefc5dea9353c">operator []</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> &amp;i) { <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>[i]; }
<a name="l00214"></a><a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#af1bb0aa0bcb3d54cd4088284c62e7f98">00214</a>                 <span class="keyword">const</span> T &amp; <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr.html#ab099993ac6385ce999bcefc5dea9353c">operator []</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> &amp;i)<span class="keyword"> const </span>{ <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(<a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>); <span class="keywordflow">return</span> <a class="code" href="structmrpt_1_1utils_1_1copiable___n_u_l_l__ptr__basic.html" title="A wrapper class for pointers that, if copied with the &quot;=&quot; operator, should be set to NULL in the copy...">copiable_NULL_ptr_basic&lt;T&gt;::ptr</a>[i]; }
<a name="l00215"></a>00215         };
<a name="l00216"></a>00216 
<a name="l00217"></a>00217 
<a name="l00218"></a>00218 
<a name="l00219"></a><a class="code" href="namespacemrpt_1_1utils.html#a145a85c502eb31a87310181f5fa7db91">00219</a>         <span class="keyword">typedef</span> <a class="code" href="structmrpt_1_1utils_1_1safe__ptr__basic.html" title="A wrapper class for pointers that can be safely copied with &quot;=&quot; operator without problems.">safe_ptr_basic&lt;void&gt;</a> <a class="code" href="namespacemrpt_1_1utils.html#a145a85c502eb31a87310181f5fa7db91">void_ptr</a>;
<a name="l00220"></a><a class="code" href="namespacemrpt_1_1utils.html#ac3912bceb5e2a4662830ec51584d134b">00220</a>         <span class="keyword">typedef</span> <a class="code" href="structmrpt_1_1utils_1_1non__copiable__ptr__basic.html">non_copiable_ptr_basic&lt;void&gt;</a> <a class="code" href="namespacemrpt_1_1utils.html#ac3912bceb5e2a4662830ec51584d134b">void_ptr_noncopy</a>;
<a name="l00221"></a>00221 
<a name="l00222"></a>00222         } <span class="comment">// End of namespace</span>
<a name="l00223"></a>00223 } <span class="comment">// End of namespace</span>
<a name="l00224"></a>00224 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150">  </td></tr> </table>  </body></html>