Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > bad97183153701b09df5fae1052b1c30 > files > 2248

crystalspace-doc-1.2.1-5mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Crystal Space 1.2.1: csutil/scf.h Source File (Crystal Space 1.2.1 Public API Reference)</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<table border="0" cellpadding="0" cellspacing="0" width="100%" class="head">
 <tr height="59">
  <td class="head" width="202" valign="bottom" style="padding-left:0;"><a href="http://www.crystalspace3d.org/"><img src="csblur.png" width="236" height="59" alt="CrystalSpace" border="0"></a></td>
  <td class="head"><h2>Public API Reference</h2></td>
 </tr>
 <tr height="11">
  <td colspan="2" class="headshadow" valign="top" style="padding-left:0;"><img src="csblurb.png" width="236" height="11" alt="" border="0"></td>
 </tr>
</table>
<div class="content">
<!-- Generated by Doxygen 1.5.3 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</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="classes.html"><span>Classes</span></a></li>
    <li class="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  </ul>
</div>
<h1>csutil/scf.h</h1><a href="scf_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">    Crystal Space Shared Class Facility (SCF)</span>
<a name="l00003"></a>00003 <span class="comment">    Copyright (C) 1999 by Andrew Zabolotny</span>
<a name="l00004"></a>00004 <span class="comment">              (C) 2005 by Marten Svanfeldt</span>
<a name="l00005"></a>00005 <span class="comment">              (C) 2005 by Michael Adams</span>
<a name="l00006"></a>00006 <span class="comment"></span>
<a name="l00007"></a>00007 <span class="comment">    This library is free software; you can redistribute it and/or</span>
<a name="l00008"></a>00008 <span class="comment">    modify it under the terms of the GNU Library General Public</span>
<a name="l00009"></a>00009 <span class="comment">    License as published by the Free Software Foundation; either</span>
<a name="l00010"></a>00010 <span class="comment">    version 2 of the License, or (at your option) any later version.</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment">    This library is distributed in the hope that it will be useful,</span>
<a name="l00013"></a>00013 <span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00014"></a>00014 <span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00015"></a>00015 <span class="comment">    Library General Public License for more details.</span>
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">    You should have received a copy of the GNU Library General Public</span>
<a name="l00018"></a>00018 <span class="comment">    License along with this library; if not, write to the Free</span>
<a name="l00019"></a>00019 <span class="comment">    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</span>
<a name="l00020"></a>00020 <span class="comment">*/</span>
<a name="l00021"></a>00021 
<a name="l00022"></a>00022 <span class="preprocessor">#ifndef __CSSCF_H__</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define __CSSCF_H__</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "csextern.h"</span>
<a name="l00026"></a>00026 
<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="csutil_2array_8h.html" title="Generic Array Template.">csutil/array.h</a>"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="ref_8h.html" title="Smart Pointers.">csutil/ref.h</a>"</span>
<a name="l00029"></a>00029 
<a name="l00038"></a>00038 <span class="keyword">class </span><a class="code" href="classcsPathsList.html" title="Class to manage a list of paths.">csPathsList</a>;
<a name="l00039"></a>00039 
<a name="l00040"></a>00040 <span class="preprocessor">#ifndef CS_TYPENAME</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">  #ifdef CS_REF_TRACKER</span>
<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">   #include &lt;typeinfo&gt;</span>
<a name="l00043"></a>00043 <span class="preprocessor">   #define CS_TYPENAME(x)                   typeid(x).name()</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">  #else</span>
<a name="l00045"></a><a class="code" href="group__scf.html#gb3fb7f6a541c017fbcd04fcbf75288ae">00045</a> <span class="preprocessor"></span><span class="preprocessor">   #define CS_TYPENAME(x)                   0</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">  #endif</span>
<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span>
<a name="l00049"></a>00049 <span class="comment">// INTERFACE DEFINITIONS</span>
<a name="l00050"></a>00050 <span class="preprocessor">#include "<a class="code" href="scf__interface_8h.html" title="Crystal Space Shared Class Facility (SCF) - interface creation support.">csutil/scf_interface.h</a>"</span>
<a name="l00051"></a>00051 <span class="comment">// NEW STYLE IMPLEMENTATION</span>
<a name="l00052"></a>00052 <span class="comment">//#include "csutil/scf_implementation.h"</span>
<a name="l00053"></a>00053 
<a name="l00054"></a>00054 
<a name="l00055"></a>00055 <span class="comment">//-- Helper macros</span>
<a name="l00056"></a>00056 
<a name="l00061"></a>00061 <span class="preprocessor">#ifdef SCF_DEBUG</span>
<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#  define SCF_TRACE(x)                                                  \</span>
<a name="l00063"></a>00063 <span class="preprocessor">   {                                                                    \</span>
<a name="l00064"></a>00064 <span class="preprocessor">     printf ("SCF [%s:%d]:\n", __FILE__, (int)__LINE__);                \</span>
<a name="l00065"></a>00065 <span class="preprocessor">     printf x; SCF_PRINT_CALL_ADDRESS                                   \</span>
<a name="l00066"></a>00066 <span class="preprocessor">   }</span>
<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00068"></a><a class="code" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0">00068</a> <span class="preprocessor"></span><span class="preprocessor">#  define SCF_TRACE(x)</span>
<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span>
<a name="l00075"></a>00075 <span class="preprocessor">#if (__GNUC__ &gt;= 3) || ((__GNUC__ &gt;= 2) &amp;&amp; (__GNUC_MINOR__ &gt;= 8))</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#  define SCF_PRINT_CALL_ADDRESS                                        \</span>
<a name="l00077"></a>00077 <span class="preprocessor">   printf ("  Called from address %p\n", __builtin_return_address (0));</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00079"></a><a class="code" href="group__scf.html#g08f654e1f5dad17bf5c067fd599fd4ef">00079</a> <span class="preprocessor"></span><span class="preprocessor">#  define SCF_PRINT_CALL_ADDRESS</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00081"></a>00081 <span class="preprocessor"></span>
<a name="l00082"></a>00082 
<a name="l00083"></a>00083 <span class="preprocessor">#ifdef CS_REF_TRACKER</span>
<a name="l00084"></a>00084 <span class="preprocessor"></span> <span class="comment">/* @@@ HACK: Force an AddAlias() call for every contained interface</span>
<a name="l00085"></a>00085 <span class="comment">  * However, when iSCF::SCF == 0, don't call QI to prevent interface ID </span>
<a name="l00086"></a>00086 <span class="comment">  * resolution (which will fail).</span>
<a name="l00087"></a>00087 <span class="comment">  */</span>
<a name="l00088"></a>00088 <span class="preprocessor"> #define SCF_INIT_TRACKER_ALIASES    \</span>
<a name="l00089"></a>00089 <span class="preprocessor">  if (iSCF::SCF != 0) QueryInterface ((scfInterfaceID)-1, -1);</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00091"></a><a class="code" href="group__scf.html#g7da6359c3ea79d8ab254f78d0b29af71">00091</a> <span class="preprocessor"></span><span class="preprocessor"> #define SCF_INIT_TRACKER_ALIASES</span>
<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span>
<a name="l00094"></a>00094 <span class="comment">//-- Old style implementation</span>
<a name="l00099"></a><a class="code" href="group__scf.html#g3a58a1f2306d454390e234d6361ddffe">00099</a> <span class="comment"></span><span class="preprocessor">#define SCF_DECLARE_IBASE                                               \</span>
<a name="l00100"></a>00100 <span class="preprocessor">  int scfRefCount;              </span><span class="comment">/* Reference counter */</span>                 \
<a name="l00101"></a>00101   csArray&lt;void**&gt;* scfWeakRefOwners;                                    \
<a name="l00102"></a>00102   void scfRemoveRefOwners ();                                           \
<a name="l00103"></a>00103   SCF_DECLARE_EMBEDDED_IBASE (iBase)
<a name="l00104"></a>00104 
<a name="l00109"></a><a class="code" href="group__scf.html#g1c5273660c64350850cb55a4a04f7aae">00109</a> <span class="preprocessor">#define SCF_DECLARE_EMBEDDED_IBASE(OuterClass)                          \</span>
<a name="l00110"></a>00110 <span class="preprocessor">public:                                                                 \</span>
<a name="l00111"></a>00111 <span class="preprocessor">  OuterClass *scfParent;        </span><span class="comment">/* The parent object */</span>                 \
<a name="l00112"></a>00112   virtual void IncRef ();                                               \
<a name="l00113"></a>00113   virtual void DecRef ();                                               \
<a name="l00114"></a>00114   virtual int GetRefCount ();                                           \
<a name="l00115"></a>00115   virtual void AddRefOwner (void** ref_owner);                          \
<a name="l00116"></a>00116   virtual void RemoveRefOwner (void** ref_owner);                       \
<a name="l00117"></a>00117   virtual void *QueryInterface (scfInterfaceID iInterfaceID, int iVersion)
<a name="l00118"></a>00118 
<a name="l00128"></a><a class="code" href="group__scf.html#g1a458452568fb70762717a993d85bb38">00128</a> <span class="preprocessor">#define SCF_CONSTRUCT_IBASE(Parent)                                     \</span>
<a name="l00129"></a>00129 <span class="preprocessor">  csRefTrackerAccess::TrackConstruction (this);                         \</span>
<a name="l00130"></a>00130 <span class="preprocessor">  csRefTrackerAccess::SetDescription (this, CS_TYPENAME(*this));        \</span>
<a name="l00131"></a>00131 <span class="preprocessor">  scfRefCount = 1;                                                      \</span>
<a name="l00132"></a>00132 <span class="preprocessor">  scfWeakRefOwners = 0;                                                 \</span>
<a name="l00133"></a>00133 <span class="preprocessor">  scfParent = Parent; if (scfParent) scfParent-&gt;IncRef();               \</span>
<a name="l00134"></a>00134 <span class="preprocessor">  SCF_INIT_TRACKER_ALIASES                                              </span>
<a name="l00135"></a>00135 <span class="preprocessor"></span>
<a name="l00145"></a><a class="code" href="group__scf.html#g8b371049a76e7d2c8a2fab1cb1f189eb">00145</a> <span class="preprocessor">#define SCF_CONSTRUCT_EMBEDDED_IBASE(Interface)                         \</span>
<a name="l00146"></a>00146 <span class="preprocessor">  Interface.scfParent = this;                                           \</span>
<a name="l00147"></a>00147 <span class="preprocessor">  csRefTrackerAccess::AddAlias (&amp;Interface, this);</span>
<a name="l00148"></a>00148 <span class="preprocessor"></span>
<a name="l00154"></a><a class="code" href="group__scf.html#g877921891b0406c28d11a7e378be36f1">00154</a> <span class="preprocessor">#define SCF_DESTRUCT_IBASE()                                            \</span>
<a name="l00155"></a>00155 <span class="preprocessor">  csRefTrackerAccess::TrackDestruction (this, scfRefCount);             \</span>
<a name="l00156"></a>00156 <span class="preprocessor">  scfRemoveRefOwners ();</span>
<a name="l00157"></a>00157 <span class="preprocessor"></span>
<a name="l00164"></a><a class="code" href="group__scf.html#gf43af0ec1c503ba57f60766aa3c88e5c">00164</a> <span class="preprocessor">#define SCF_DESTRUCT_EMBEDDED_IBASE(Interface)                          \</span>
<a name="l00165"></a>00165 <span class="preprocessor">  csRefTrackerAccess::RemoveAlias (&amp;Interface, this);                   \</span>
<a name="l00166"></a>00166 <span class="preprocessor">  Interface.scfParent = 0;</span>
<a name="l00167"></a>00167 <span class="preprocessor"></span>
<a name="l00173"></a><a class="code" href="group__scf.html#g8a1213fd6984424826788aaee0a3b398">00173</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_INCREF(Class)                               \</span>
<a name="l00174"></a>00174 <span class="preprocessor">void Class::IncRef ()                                                   \</span>
<a name="l00175"></a>00175 <span class="preprocessor">{                                                                       \</span>
<a name="l00176"></a>00176 <span class="preprocessor">  SCF_TRACE (("  (%s *)%p-&gt;IncRef (%d)\n", #Class, this, scfRefCount + 1));\</span>
<a name="l00177"></a>00177 <span class="preprocessor">  csRefTrackerAccess::TrackIncRef (this, scfRefCount);                  \</span>
<a name="l00178"></a>00178 <span class="preprocessor">  scfRefCount++;                                                        \</span>
<a name="l00179"></a>00179 <span class="preprocessor">}</span>
<a name="l00180"></a>00180 <span class="preprocessor"></span>
<a name="l00189"></a><a class="code" href="group__scf.html#g176199e7058f9f662e4ad178e3e2c9a9">00189</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_DECREF(Class)                               \</span>
<a name="l00190"></a>00190 <span class="preprocessor">void Class::DecRef ()                                                   \</span>
<a name="l00191"></a>00191 <span class="preprocessor">{                                                                       \</span>
<a name="l00192"></a>00192 <span class="preprocessor">  csRefTrackerAccess::TrackDecRef (this, scfRefCount);                  \</span>
<a name="l00193"></a>00193 <span class="preprocessor">  if (scfRefCount == 1)                                                 \</span>
<a name="l00194"></a>00194 <span class="preprocessor">  {                                                                     \</span>
<a name="l00195"></a>00195 <span class="preprocessor">    SCF_TRACE ((" delete (%s *)%p\n", #Class, this));                   \</span>
<a name="l00196"></a>00196 <span class="preprocessor">    scfRemoveRefOwners ();                                              \</span>
<a name="l00197"></a>00197 <span class="preprocessor">    if (scfParent)                                                      \</span>
<a name="l00198"></a>00198 <span class="preprocessor">      scfParent-&gt;DecRef ();                                             \</span>
<a name="l00199"></a>00199 <span class="preprocessor">    delete this;                                                        \</span>
<a name="l00200"></a>00200 <span class="preprocessor">    return;                                                             \</span>
<a name="l00201"></a>00201 <span class="preprocessor">  }                                                                     \</span>
<a name="l00202"></a>00202 <span class="preprocessor">  scfRefCount--;                                                        \</span>
<a name="l00203"></a>00203 <span class="preprocessor">}</span>
<a name="l00204"></a>00204 <span class="preprocessor"></span>
<a name="l00211"></a><a class="code" href="group__scf.html#gf6af2f711113e622becbcb69cbdd1fbb">00211</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS(Class)                    \</span>
<a name="l00212"></a>00212 <span class="preprocessor">void Class::scfRemoveRefOwners ()                                       \</span>
<a name="l00213"></a>00213 <span class="preprocessor">{                                                                       \</span>
<a name="l00214"></a>00214 <span class="preprocessor">  if (!scfWeakRefOwners) return;                                        \</span>
<a name="l00215"></a>00215 <span class="preprocessor">  for (size_t i = 0 ; i &lt; scfWeakRefOwners-&gt;GetSize () ; i++)           \</span>
<a name="l00216"></a>00216 <span class="preprocessor">  {                                                                     \</span>
<a name="l00217"></a>00217 <span class="preprocessor">    void** p = (*scfWeakRefOwners)[i];                                  \</span>
<a name="l00218"></a>00218 <span class="preprocessor">    *p = 0;                                                             \</span>
<a name="l00219"></a>00219 <span class="preprocessor">  }                                                                     \</span>
<a name="l00220"></a>00220 <span class="preprocessor">  delete scfWeakRefOwners;                                              \</span>
<a name="l00221"></a>00221 <span class="preprocessor">  scfWeakRefOwners = 0;                                                 \</span>
<a name="l00222"></a>00222 <span class="preprocessor">}</span>
<a name="l00223"></a>00223 <span class="preprocessor"></span>
<a name="l00228"></a><a class="code" href="group__scf.html#ga14ac21f00cf6a9b7ef2f5743a81f2cf">00228</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_REFOWNER(Class)                             \</span>
<a name="l00229"></a>00229 <span class="preprocessor">void Class::AddRefOwner (void** ref_owner)                              \</span>
<a name="l00230"></a>00230 <span class="preprocessor">{                                                                       \</span>
<a name="l00231"></a>00231 <span class="preprocessor">  if (!scfWeakRefOwners)                                                \</span>
<a name="l00232"></a>00232 <span class="preprocessor">    scfWeakRefOwners = new csArray&lt;void**&gt; (0, 4);                      \</span>
<a name="l00233"></a>00233 <span class="preprocessor">  scfWeakRefOwners-&gt;InsertSorted (ref_owner);                           \</span>
<a name="l00234"></a>00234 <span class="preprocessor">}                                                                       \</span>
<a name="l00235"></a>00235 <span class="preprocessor">void Class::RemoveRefOwner (void** ref_owner)                           \</span>
<a name="l00236"></a>00236 <span class="preprocessor">{                                                                       \</span>
<a name="l00237"></a>00237 <span class="preprocessor">  if (!scfWeakRefOwners)                                                \</span>
<a name="l00238"></a>00238 <span class="preprocessor">    return;                                                             \</span>
<a name="l00239"></a>00239 <span class="preprocessor">  size_t index = scfWeakRefOwners-&gt;FindSortedKey (                      \</span>
<a name="l00240"></a>00240 <span class="preprocessor">    csArrayCmp&lt;void**, void**&gt; (ref_owner));                            \</span>
<a name="l00241"></a>00241 <span class="preprocessor">  if (index != csArrayItemNotFound) scfWeakRefOwners-&gt;DeleteIndex (     \</span>
<a name="l00242"></a>00242 <span class="preprocessor">    index);                                                             \</span>
<a name="l00243"></a>00243 <span class="preprocessor">}</span>
<a name="l00244"></a>00244 <span class="preprocessor"></span>
<a name="l00249"></a><a class="code" href="group__scf.html#g9e7383896428a0a12c4e4a46362b4e9e">00249</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_GETREFCOUNT(Class)                          \</span>
<a name="l00250"></a>00250 <span class="preprocessor">int Class::GetRefCount ()                                               \</span>
<a name="l00251"></a>00251 <span class="preprocessor">{                                                                       \</span>
<a name="l00252"></a>00252 <span class="preprocessor">  return scfRefCount;                                                   \</span>
<a name="l00253"></a>00253 <span class="preprocessor">}</span>
<a name="l00254"></a>00254 <span class="preprocessor"></span>
<a name="l00261"></a><a class="code" href="group__scf.html#gce4cdb30da337f6913d4509343077557">00261</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_QUERY(Class)                                \</span>
<a name="l00262"></a>00262 <span class="preprocessor">void *Class::QueryInterface (scfInterfaceID iInterfaceID, int iVersion) \</span>
<a name="l00263"></a>00263 <span class="preprocessor">{                                                                       \</span>
<a name="l00264"></a>00264 <span class="preprocessor">  SCF_TRACE (("  (%s *)%p-&gt;QueryInterface (%lu, %08X)\n",               \</span>
<a name="l00265"></a>00265 <span class="preprocessor">    #Class, this, iInterfaceID, iVersion));</span>
<a name="l00266"></a>00266 <span class="preprocessor"></span>
<a name="l00273"></a><a class="code" href="group__scf.html#g87b3a81a37585388f074c48328ab8738">00273</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_QUERY_END                                   \</span>
<a name="l00274"></a>00274 <span class="preprocessor">  return scfParent ?                                                    \</span>
<a name="l00275"></a>00275 <span class="preprocessor">    scfParent-&gt;QueryInterface (iInterfaceID, iVersion) : 0;             \</span>
<a name="l00276"></a>00276 <span class="preprocessor">}</span>
<a name="l00277"></a>00277 <span class="preprocessor"></span>
<a name="l00283"></a><a class="code" href="group__scf.html#gbcda0c42b7c3a7b12ecdb407bb0ba3d8">00283</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE(Class)                                      \</span>
<a name="l00284"></a>00284 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_INCREF(Class)                                     \</span>
<a name="l00285"></a>00285 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_DECREF(Class)                                     \</span>
<a name="l00286"></a>00286 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_GETREFCOUNT(Class)                                \</span>
<a name="l00287"></a>00287 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_REFOWNER(Class)                                   \</span>
<a name="l00288"></a>00288 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS(Class)                          \</span>
<a name="l00289"></a>00289 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_QUERY(Class)</span>
<a name="l00290"></a>00290 <span class="preprocessor"></span>
<a name="l00295"></a><a class="code" href="group__scf.html#g17899d525bbb5d9bdba293c5f028eb91">00295</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_END                                         \</span>
<a name="l00296"></a>00296 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_QUERY_END</span>
<a name="l00297"></a>00297 <span class="preprocessor"></span>
<a name="l00304"></a><a class="code" href="group__scf.html#gc94d6b350ecfcac7ed08aaaadf04fb56">00304</a> <span class="preprocessor">#define SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF(Class)                      \</span>
<a name="l00305"></a>00305 <span class="preprocessor">void Class::IncRef ()                                                   \</span>
<a name="l00306"></a>00306 <span class="preprocessor">{                                                                       \</span>
<a name="l00307"></a>00307 <span class="preprocessor">  SCF_TRACE (("  (%s *)%p-&gt;IncRef (%d)\n", #Class, this,                \</span>
<a name="l00308"></a>00308 <span class="preprocessor">    scfParent-&gt;GetRefCount () + 1));                                    \</span>
<a name="l00309"></a>00309 <span class="preprocessor">  scfParent-&gt;IncRef ();                                                 \</span>
<a name="l00310"></a>00310 <span class="preprocessor">}</span>
<a name="l00311"></a>00311 <span class="preprocessor"></span>
<a name="l00318"></a><a class="code" href="group__scf.html#gbd1ed82014e91ff4e6b0f3d86716e256">00318</a> <span class="preprocessor">#define SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF(Class)                      \</span>
<a name="l00319"></a>00319 <span class="preprocessor">void Class::DecRef ()                                                   \</span>
<a name="l00320"></a>00320 <span class="preprocessor">{                                                                       \</span>
<a name="l00321"></a>00321 <span class="preprocessor">  SCF_TRACE (("  (%s *)%p-&gt;DecRef (%d)\n", #Class, this,                \</span>
<a name="l00322"></a>00322 <span class="preprocessor">              scfParent-&gt;GetRefCount ()-1));                            \</span>
<a name="l00323"></a>00323 <span class="preprocessor">  scfParent-&gt;DecRef ();                                                 \</span>
<a name="l00324"></a>00324 <span class="preprocessor">}</span>
<a name="l00325"></a>00325 <span class="preprocessor"></span>
<a name="l00330"></a><a class="code" href="group__scf.html#g80f42c8c1fafd205917d3b3b7b831ec6">00330</a> <span class="preprocessor">#define SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT(Class)                 \</span>
<a name="l00331"></a>00331 <span class="preprocessor">int Class::GetRefCount ()                                               \</span>
<a name="l00332"></a>00332 <span class="preprocessor">{                                                                       \</span>
<a name="l00333"></a>00333 <span class="preprocessor">  return scfParent-&gt;GetRefCount ();                                     \</span>
<a name="l00334"></a>00334 <span class="preprocessor">}</span>
<a name="l00335"></a>00335 <span class="preprocessor"></span>
<a name="l00340"></a><a class="code" href="group__scf.html#ge4a9107b28eabdd14ce0172fe1820781">00340</a> <span class="preprocessor">#define SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER(Class)                    \</span>
<a name="l00341"></a>00341 <span class="preprocessor">void Class::AddRefOwner (void** ref_owner)                              \</span>
<a name="l00342"></a>00342 <span class="preprocessor">{                                                                       \</span>
<a name="l00343"></a>00343 <span class="preprocessor">  scfParent-&gt;AddRefOwner (ref_owner);                                   \</span>
<a name="l00344"></a>00344 <span class="preprocessor">}                                                                       \</span>
<a name="l00345"></a>00345 <span class="preprocessor">void Class::RemoveRefOwner (void** ref_owner)                           \</span>
<a name="l00346"></a>00346 <span class="preprocessor">{                                                                       \</span>
<a name="l00347"></a>00347 <span class="preprocessor">  scfParent-&gt;RemoveRefOwner (ref_owner);                                \</span>
<a name="l00348"></a>00348 <span class="preprocessor">}</span>
<a name="l00349"></a>00349 <span class="preprocessor"></span>
<a name="l00356"></a><a class="code" href="group__scf.html#g8dd36ea504eab347795fa91c98225269">00356</a> <span class="preprocessor">#define SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY(Class)                       \</span>
<a name="l00357"></a>00357 <span class="preprocessor">void *Class::QueryInterface (scfInterfaceID iInterfaceID, int iVersion) \</span>
<a name="l00358"></a>00358 <span class="preprocessor">{                                                                       \</span>
<a name="l00359"></a>00359 <span class="preprocessor">  SCF_TRACE (("  (%s *)%p-&gt;QueryInterface (%lu, %08X)\n",               \</span>
<a name="l00360"></a>00360 <span class="preprocessor">    #Class, this, iInterfaceID, iVersion));</span>
<a name="l00361"></a>00361 <span class="preprocessor"></span>
<a name="l00368"></a><a class="code" href="group__scf.html#g636b87ffdf233dfb1241c5cb690dd18c">00368</a> <span class="preprocessor">#define SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END                          \</span>
<a name="l00369"></a>00369 <span class="preprocessor">  return scfParent-&gt;QueryInterface (iInterfaceID, iVersion);            \</span>
<a name="l00370"></a>00370 <span class="preprocessor">}</span>
<a name="l00371"></a>00371 <span class="preprocessor"></span>
<a name="l00378"></a><a class="code" href="group__scf.html#gd8ce85493f112b4cb7608dccddcbfab9">00378</a> <span class="preprocessor">#define SCF_IMPLEMENT_EMBEDDED_IBASE(Class)                             \</span>
<a name="l00379"></a>00379 <span class="preprocessor">  SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF(Class)                            \</span>
<a name="l00380"></a>00380 <span class="preprocessor">  SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF(Class)                            \</span>
<a name="l00381"></a>00381 <span class="preprocessor">  SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT(Class)                       \</span>
<a name="l00382"></a>00382 <span class="preprocessor">  SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER(Class)                          \</span>
<a name="l00383"></a>00383 <span class="preprocessor">  SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY(Class)</span>
<a name="l00384"></a>00384 <span class="preprocessor"></span>
<a name="l00389"></a><a class="code" href="group__scf.html#ga3cc3f0a892c0f3296fa15b8e297d92f">00389</a> <span class="preprocessor">#define SCF_IMPLEMENT_EMBEDDED_IBASE_END                                \</span>
<a name="l00390"></a>00390 <span class="preprocessor">  SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END</span>
<a name="l00391"></a>00391 <span class="preprocessor"></span>
<a name="l00398"></a><a class="code" href="group__scf.html#g4933dd6e0823013c37b62e6b99550cd5">00398</a> <span class="preprocessor">#define SCF_IMPLEMENTS_INTERFACE(Interface)                             \</span>
<a name="l00399"></a>00399 <span class="preprocessor">  csRefTrackerAccess::AddAlias (static_cast&lt;Interface*&gt; (this), this);\</span>
<a name="l00400"></a>00400 <span class="preprocessor">  SCF_IMPLEMENTS_INTERFACE_COMMON (Interface, this)</span>
<a name="l00401"></a>00401 <span class="preprocessor"></span>
<a name="l00406"></a><a class="code" href="group__scf.html#g6d31bde1cff22be19c402a540410c6de">00406</a> <span class="preprocessor">#define SCF_IMPLEMENTS_EMBEDDED_INTERFACE(Interface)                    \</span>
<a name="l00407"></a>00407 <span class="preprocessor">  SCF_IMPLEMENTS_INTERFACE_COMMON (Interface, (&amp;scf##Interface))</span>
<a name="l00408"></a>00408 <span class="preprocessor"></span>
<a name="l00412"></a><a class="code" href="group__scf.html#gb71260911e51a3c0885241d009fb55f8">00412</a> <span class="preprocessor">#define SCF_IMPLEMENTS_INTERFACE_COMMON(Interface,Object)               \</span>
<a name="l00413"></a>00413 <span class="preprocessor">  if (iInterfaceID == scfInterfaceTraits&lt;Interface&gt;::GetID() &amp;&amp;         \</span>
<a name="l00414"></a>00414 <span class="preprocessor">    scfCompatibleVersion (iVersion, scfInterfaceTraits&lt;Interface&gt;::GetVersion())) \</span>
<a name="l00415"></a>00415 <span class="preprocessor">  {                                                                     \</span>
<a name="l00416"></a>00416 <span class="preprocessor">    (Object)-&gt;IncRef ();                                                \</span>
<a name="l00417"></a>00417 <span class="preprocessor">    return static_cast&lt;Interface*&gt; (Object);                            \</span>
<a name="l00418"></a>00418 <span class="preprocessor">  }</span>
<a name="l00419"></a>00419 <span class="preprocessor"></span>
<a name="l00430"></a><a class="code" href="group__scf.html#g28edb7c87e3f5e9558539e156dee8259">00430</a> <span class="preprocessor">#define SCF_DECLARE_IBASE_EXT(ParentClass)                              \</span>
<a name="l00431"></a>00431 <span class="preprocessor">  typedef ParentClass __scf_superclass;                                 \</span>
<a name="l00432"></a>00432 <span class="preprocessor">  virtual void IncRef ();                                               \</span>
<a name="l00433"></a>00433 <span class="preprocessor">  virtual void DecRef ();                                               \</span>
<a name="l00434"></a>00434 <span class="preprocessor">  virtual int GetRefCount ();                                           \</span>
<a name="l00435"></a>00435 <span class="preprocessor">  virtual void AddRefOwner (void** ref_owner);                          \</span>
<a name="l00436"></a>00436 <span class="preprocessor">  virtual void RemoveRefOwner (void** ref_owner);                       \</span>
<a name="l00437"></a>00437 <span class="preprocessor">  virtual void *QueryInterface (scfInterfaceID iInterfaceID, int iVersion)</span>
<a name="l00438"></a>00438 <span class="preprocessor"></span>
<a name="l00445"></a><a class="code" href="group__scf.html#g8439bf789cd1e09faae47d3c591f6910">00445</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_EXT_INCREF(Class)                           \</span>
<a name="l00446"></a>00446 <span class="preprocessor">void Class::IncRef ()                                                   \</span>
<a name="l00447"></a>00447 <span class="preprocessor">{                                                                       \</span>
<a name="l00448"></a>00448 <span class="preprocessor">  __scf_superclass::IncRef ();                                          \</span>
<a name="l00449"></a>00449 <span class="preprocessor">}</span>
<a name="l00450"></a>00450 <span class="preprocessor"></span>
<a name="l00457"></a><a class="code" href="group__scf.html#g7c67d5dd0c42e9014b94135ae2ab58e7">00457</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_EXT_DECREF(Class)                           \</span>
<a name="l00458"></a>00458 <span class="preprocessor">void Class::DecRef ()                                                   \</span>
<a name="l00459"></a>00459 <span class="preprocessor">{                                                                       \</span>
<a name="l00460"></a>00460 <span class="preprocessor">  __scf_superclass::DecRef ();                                          \</span>
<a name="l00461"></a>00461 <span class="preprocessor">}</span>
<a name="l00462"></a>00462 <span class="preprocessor"></span>
<a name="l00469"></a><a class="code" href="group__scf.html#g2370479942b59428b84236b1e6bad32f">00469</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT(Class)                      \</span>
<a name="l00470"></a>00470 <span class="preprocessor">int Class::GetRefCount ()                                               \</span>
<a name="l00471"></a>00471 <span class="preprocessor">{                                                                       \</span>
<a name="l00472"></a>00472 <span class="preprocessor">  return __scf_superclass::GetRefCount ();                              \</span>
<a name="l00473"></a>00473 <span class="preprocessor">}</span>
<a name="l00474"></a>00474 <span class="preprocessor"></span>
<a name="l00479"></a><a class="code" href="group__scf.html#gc364123d75a3bfd0efd48db3ae5cee77">00479</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_EXT_REFOWNER(Class)                 \</span>
<a name="l00480"></a>00480 <span class="preprocessor">void Class::AddRefOwner (void** ref_owner)                              \</span>
<a name="l00481"></a>00481 <span class="preprocessor">{                                                                       \</span>
<a name="l00482"></a>00482 <span class="preprocessor">  __scf_superclass::AddRefOwner (ref_owner);                            \</span>
<a name="l00483"></a>00483 <span class="preprocessor">}                                                                       \</span>
<a name="l00484"></a>00484 <span class="preprocessor">void Class::RemoveRefOwner (void** ref_owner)                           \</span>
<a name="l00485"></a>00485 <span class="preprocessor">{                                                                       \</span>
<a name="l00486"></a>00486 <span class="preprocessor">  __scf_superclass::RemoveRefOwner (ref_owner);                         \</span>
<a name="l00487"></a>00487 <span class="preprocessor">}</span>
<a name="l00488"></a>00488 <span class="preprocessor"></span>
<a name="l00495"></a><a class="code" href="group__scf.html#g34c31f88ff4057701027fe3e2520b3fd">00495</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_EXT_QUERY(Class)                            \</span>
<a name="l00496"></a>00496 <span class="preprocessor">void *Class::QueryInterface (scfInterfaceID iInterfaceID, int iVersion) \</span>
<a name="l00497"></a>00497 <span class="preprocessor">{</span>
<a name="l00498"></a>00498 <span class="preprocessor"></span>
<a name="l00505"></a><a class="code" href="group__scf.html#g70f51e8bc495a9f00382f5be26ffac6c">00505</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_EXT_QUERY_END                               \</span>
<a name="l00506"></a>00506 <span class="preprocessor">  return __scf_superclass::QueryInterface (iInterfaceID, iVersion);     \</span>
<a name="l00507"></a>00507 <span class="preprocessor">}</span>
<a name="l00508"></a>00508 <span class="preprocessor"></span>
<a name="l00513"></a><a class="code" href="group__scf.html#g15417d8a30b7f466a2eb186889aab0a1">00513</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_EXT(Class)                                  \</span>
<a name="l00514"></a>00514 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_EXT_INCREF(Class)                                 \</span>
<a name="l00515"></a>00515 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_EXT_DECREF(Class)                                 \</span>
<a name="l00516"></a>00516 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT(Class)                            \</span>
<a name="l00517"></a>00517 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_EXT_REFOWNER(Class)                               \</span>
<a name="l00518"></a>00518 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_EXT_QUERY(Class)</span>
<a name="l00519"></a>00519 <span class="preprocessor"></span>
<a name="l00524"></a><a class="code" href="group__scf.html#gb35b13fd96454cd6ff8b70d05be20010">00524</a> <span class="preprocessor">#define SCF_IMPLEMENT_IBASE_EXT_END                                     \</span>
<a name="l00525"></a>00525 <span class="preprocessor">  SCF_IMPLEMENT_IBASE_EXT_QUERY_END</span>
<a name="l00526"></a>00526 <span class="preprocessor"></span>
<a name="l00542"></a>00542 <span class="preprocessor">#ifdef CS_MEMORY_TRACKER</span>
<a name="l00543"></a>00543 <span class="preprocessor"></span><span class="preprocessor">#include "memdebug.h"</span> <span class="comment">// needed for mtiRegisterModule</span>
<a name="l00544"></a>00544 <span class="comment">// This special version of SCF_IMPLEMENT_FACTORY_INIT will make sure that</span>
<a name="l00545"></a>00545 <span class="comment">// the memory tracker for this plugin is implemented.</span>
<a name="l00546"></a>00546 <span class="preprocessor">#define SCF_IMPLEMENT_FACTORY_INIT(Class)                               \</span>
<a name="l00547"></a>00547 <span class="preprocessor">static inline void Class ## _scfUnitInitialize(iSCF* SCF)               \</span>
<a name="l00548"></a>00548 <span class="preprocessor">{                                                                       \</span>
<a name="l00549"></a>00549 <span class="preprocessor">  iSCF::SCF = SCF;                                                      \</span>
<a name="l00550"></a>00550 <span class="preprocessor">  mtiRegisterModule (#Class);                                           \</span>
<a name="l00551"></a>00551 <span class="preprocessor">}                                                                       \</span>
<a name="l00552"></a>00552 <span class="preprocessor">CS_EXPORTED_FUNCTION                                                    \</span>
<a name="l00553"></a>00553 <span class="preprocessor">void CS_EXPORTED_NAME(Class,_scfInitialize)(iSCF* SCF)                  \</span>
<a name="l00554"></a>00554 <span class="preprocessor">{ Class ## _scfUnitInitialize(SCF); }</span>
<a name="l00555"></a>00555 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00556"></a><a class="code" href="group__scf.html#gb2d4f983b73223294969161c65872274">00556</a> <span class="preprocessor"></span><span class="preprocessor">#define SCF_IMPLEMENT_FACTORY_INIT(Class)                               \</span>
<a name="l00557"></a>00557 <span class="preprocessor">static inline void Class ## _scfUnitInitialize(iSCF* SCF)               \</span>
<a name="l00558"></a>00558 <span class="preprocessor">{ iSCF::SCF = SCF; }                                                    \</span>
<a name="l00559"></a>00559 <span class="preprocessor">CS_EXPORTED_FUNCTION                                                    \</span>
<a name="l00560"></a>00560 <span class="preprocessor">void CS_EXPORTED_NAME(Class,_scfInitialize)(iSCF* SCF)                  \</span>
<a name="l00561"></a>00561 <span class="preprocessor">{ Class ## _scfUnitInitialize(SCF); }</span>
<a name="l00562"></a>00562 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00563"></a>00563 <span class="preprocessor"></span>
<a name="l00569"></a><a class="code" href="group__scf.html#gb0ba5d1d55dc991a49fb67cbfb24166b">00569</a> <span class="preprocessor">#define SCF_IMPLEMENT_FACTORY_FINIS(Class)                              \</span>
<a name="l00570"></a>00570 <span class="preprocessor">CS_EXPORTED_FUNCTION                                                    \</span>
<a name="l00571"></a>00571 <span class="preprocessor">void CS_EXPORTED_NAME(Class,_scfFinalize)()                             \</span>
<a name="l00572"></a>00572 <span class="preprocessor">{                                                                       \</span>
<a name="l00573"></a>00573 <span class="preprocessor">CS_STATIC_VARIABLE_CLEANUP                                              \</span>
<a name="l00574"></a>00574 <span class="preprocessor">}</span>
<a name="l00575"></a>00575 <span class="preprocessor"></span>
<a name="l00582"></a><a class="code" href="group__scf.html#g2ff16a54724c1f00d7985bd971453418">00582</a> <span class="preprocessor">#define SCF_IMPLEMENT_FACTORY_CREATE(Class)                             \</span>
<a name="l00583"></a>00583 <span class="preprocessor">CS_EXPORTED_FUNCTION                                                    \</span>
<a name="l00584"></a>00584 <span class="preprocessor">iBase* CS_EXPORTED_NAME(Class,_Create)(iBase *iParent)                  \</span>
<a name="l00585"></a>00585 <span class="preprocessor">{                                                                       \</span>
<a name="l00586"></a>00586 <span class="preprocessor">  iBase *ret = new Class (iParent);                                     \</span>
<a name="l00587"></a>00587 <span class="preprocessor">  SCF_TRACE (("  %p = new %s ()\n", ret, #Class));                      \</span>
<a name="l00588"></a>00588 <span class="preprocessor">  return ret;                                                           \</span>
<a name="l00589"></a>00589 <span class="preprocessor">}</span>
<a name="l00590"></a>00590 <span class="preprocessor"></span>
<a name="l00597"></a><a class="code" href="group__scf.html#g373349b6fc91662b31ffaf102ef908c2">00597</a> <span class="preprocessor">#define SCF_IMPLEMENT_FACTORY(Class)                                    \</span>
<a name="l00598"></a>00598 <span class="preprocessor">  SCF_IMPLEMENT_FACTORY_INIT(Class)                                     \</span>
<a name="l00599"></a>00599 <span class="preprocessor">  SCF_IMPLEMENT_FACTORY_FINIS(Class)                                    \</span>
<a name="l00600"></a>00600 <span class="preprocessor">  SCF_IMPLEMENT_FACTORY_CREATE(Class)</span>
<a name="l00601"></a>00601 <span class="preprocessor"></span>
<a name="l00602"></a><a class="code" href="group__scf.html#gc00c0ec6f04407808f2f346093b0371e">00602</a> <span class="preprocessor">#define SCF_STATIC_CLASS_CONTEXT      "*static*"</span>
<a name="l00603"></a>00603 <span class="preprocessor"></span>
<a name="l00612"></a><a class="code" href="group__scf.html#g5c0e60d325c4df9731159efbcb607f28">00612</a> <span class="preprocessor">#define SCF_REGISTER_STATIC_CLASS(Class,Ident,Desc,Dep)                 \</span>
<a name="l00613"></a>00613 <span class="preprocessor">  CS_EXPORTED_FUNCTION iBase* CS_EXPORTED_NAME(Class,_Create)(iBase*);  \</span>
<a name="l00614"></a>00614 <span class="preprocessor">  class Class##_StaticInit__                                            \</span>
<a name="l00615"></a>00615 <span class="preprocessor">  {                                                                     \</span>
<a name="l00616"></a>00616 <span class="preprocessor">  public:                                                               \</span>
<a name="l00617"></a>00617 <span class="preprocessor">    Class##_StaticInit__()                                              \</span>
<a name="l00618"></a>00618 <span class="preprocessor">    {                                                                   \</span>
<a name="l00619"></a>00619 <span class="preprocessor">      scfRegisterStaticClass(                                           \</span>
<a name="l00620"></a>00620 <span class="preprocessor">        CS_EXPORTED_NAME(Class,_Create), Ident, Desc, Dep);             \</span>
<a name="l00621"></a>00621 <span class="preprocessor">    }                                                                   \</span>
<a name="l00622"></a>00622 <span class="preprocessor">  } Class##_static_init__;</span>
<a name="l00623"></a>00623 <span class="preprocessor"></span>
<a name="l00628"></a><a class="code" href="group__scf.html#gaf414ebd09d2ece8f0adfbc065aecc8d">00628</a> <span class="preprocessor">#define SCF_REGISTER_STATIC_LIBRARY(Module, MetaInfo)                   \</span>
<a name="l00629"></a>00629 <span class="preprocessor">  class Module##_StaticInit                                             \</span>
<a name="l00630"></a>00630 <span class="preprocessor">  {                                                                     \</span>
<a name="l00631"></a>00631 <span class="preprocessor">  public:                                                               \</span>
<a name="l00632"></a>00632 <span class="preprocessor">    Module##_StaticInit()                                               \</span>
<a name="l00633"></a>00633 <span class="preprocessor">    {                                                                   \</span>
<a name="l00634"></a>00634 <span class="preprocessor">      scfRegisterStaticClasses (MetaInfo);                              \</span>
<a name="l00635"></a>00635 <span class="preprocessor">    }                                                                   \</span>
<a name="l00636"></a>00636 <span class="preprocessor">  } Module##_static_init__;</span>
<a name="l00637"></a>00637 <span class="preprocessor"></span>
<a name="l00642"></a><a class="code" href="group__scf.html#g2c6ba99ad6c27369aaf352a41a012223">00642</a> <span class="preprocessor">#define SCF_DEFINE_FACTORY_FUNC_REGISTRATION(Class)                     \</span>
<a name="l00643"></a>00643 <span class="preprocessor">  CS_EXPORTED_FUNCTION iBase* CS_EXPORTED_NAME(Class,_Create)(iBase*);  \</span>
<a name="l00644"></a>00644 <span class="preprocessor">  class Class##_StaticInit                                              \</span>
<a name="l00645"></a>00645 <span class="preprocessor">  {                                                                     \</span>
<a name="l00646"></a>00646 <span class="preprocessor">  public:                                                               \</span>
<a name="l00647"></a>00647 <span class="preprocessor">    Class##_StaticInit()                                                \</span>
<a name="l00648"></a>00648 <span class="preprocessor">    {                                                                   \</span>
<a name="l00649"></a>00649 <span class="preprocessor">      scfRegisterStaticFactoryFunc (CS_EXPORTED_NAME(Class,_Create),    \</span>
<a name="l00650"></a>00650 <span class="preprocessor">        #Class);                                                        \</span>
<a name="l00651"></a>00651 <span class="preprocessor">    }                                                                   \</span>
<a name="l00652"></a>00652 <span class="preprocessor">  };</span>
<a name="l00653"></a>00653 <span class="preprocessor"></span>
<a name="l00658"></a><a class="code" href="group__scf.html#g4e44cfe80f9a64fdac1e5b29049291ce">00658</a> <span class="preprocessor">#define SCF_USE_STATIC_PLUGIN(Module)                                   \</span>
<a name="l00659"></a>00659 <span class="preprocessor">  namespace csStaticPluginInit                                          \</span>
<a name="l00660"></a>00660 <span class="preprocessor">  {                                                                     \</span>
<a name="l00661"></a>00661 <span class="preprocessor">    class Module { public: Module(); };                                 \</span>
<a name="l00662"></a>00662 <span class="preprocessor">    Module Module##_StaticInit;                                         \</span>
<a name="l00663"></a>00663 <span class="preprocessor">  }</span>
<a name="l00664"></a>00664 <span class="preprocessor"></span>
<a name="l00673"></a><a class="code" href="group__scf.html#g2ff469be5c227919eb41b976f42dd737">00673</a> <span class="preprocessor">#define SCF_REGISTER_FACTORY_FUNC(Class)                                \</span>
<a name="l00674"></a>00674 <span class="preprocessor">  SCF_DEFINE_FACTORY_FUNC_REGISTRATION(Class)                           \</span>
<a name="l00675"></a>00675 <span class="preprocessor">  Class##_StaticInit Class##_static_init__;</span>
<a name="l00676"></a>00676 <span class="preprocessor"></span>
<a name="l00677"></a>00677 <span class="comment">//--------------------------------------------- Class factory interface -----//</span>
<a name="l00678"></a>00678 
<a name="l00692"></a><a class="code" href="structiFactory.html">00692</a> <span class="keyword">struct </span><a class="code" href="structiFactory.html" title="iFactory is an interface that is used to create instances of shared classes.">iFactory</a> : <span class="keyword">public</span> <a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>
<a name="l00693"></a>00693 {
<a name="l00695"></a>00695   <span class="keyword">virtual</span> <a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> *<a class="code" href="structiFactory.html#bc5d7a83e4e34cebdb2887be1240cefa" title="Create a instance of class this factory represents.">CreateInstance</a> () = 0;
<a name="l00697"></a>00697   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structiFactory.html#8c75e4065f6dbafb09004af7a987a4a2" title="Try to unload class module (i.e. shared module).">TryUnload</a> () = 0;
<a name="l00699"></a>00699   <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structiFactory.html#ba15a898966c3845f127f62b1c5aaec4" title="Query class description string.">QueryDescription</a> () = 0;
<a name="l00701"></a>00701   <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structiFactory.html#c6f6015bab14e1e52b70eacd2c8c9ff5" title="Query class dependency strings.">QueryDependencies</a> () = 0;
<a name="l00703"></a>00703   <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structiFactory.html#f253d81455e7e06e20944d6d8f0fb893" title="Query class ID.">QueryClassID</a> () = 0;
<a name="l00705"></a>00705   <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structiFactory.html#85984393a9c5922a029cfb1f5ebd2fe0" title="Query library module name.">QueryModuleName</a> () = 0;
<a name="l00706"></a>00706 };
<a name="l00707"></a>00707 
<a name="l00708"></a>00708 <span class="comment">//----------------------------------------------- Client-side functions -----//</span>
<a name="l00709"></a>00709 
<a name="l00714"></a>00714 <span class="keyword">enum</span>
<a name="l00715"></a>00715 {
<a name="l00716"></a><a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e103bd7d223adbf6f6320c245ac38d6bc">00716</a>   <a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e103bd7d223adbf6f6320c245ac38d6bc" title="No diagnostic information.">SCF_VERBOSE_NONE</a>            = 0,      
<a name="l00717"></a><a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e1618478cd455be73b5425af2658c054f">00717</a>   <a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e1618478cd455be73b5425af2658c054f" title="Directories scanned for plugins.">SCF_VERBOSE_PLUGIN_SCAN</a>     = 1 &lt;&lt; 0, 
<a name="l00718"></a><a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6ef68a22da73642042e6355dcffdef8a74">00718</a>   <a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6ef68a22da73642042e6355dcffdef8a74" title="Plugins loaded and unloaded.">SCF_VERBOSE_PLUGIN_LOAD</a>     = 1 &lt;&lt; 1, 
<a name="l00719"></a><a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6eeb61d605202afa31732b04143d022e63">00719</a>   <a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6eeb61d605202afa31732b04143d022e63" title="Plugins discovered and registered.">SCF_VERBOSE_PLUGIN_REGISTER</a> = 1 &lt;&lt; 2, 
<a name="l00720"></a><a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e1adcd0e4d15d2bec680094f5154aa4a0">00720</a>   <a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e1adcd0e4d15d2bec680094f5154aa4a0" title="Classes registered within plugins.">SCF_VERBOSE_CLASS_REGISTER</a>  = 1 &lt;&lt; 3, 
<a name="l00721"></a><a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e5b39fff166e4e12caed2e5cb5ff67ea5">00721</a>   <a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e5b39fff166e4e12caed2e5cb5ff67ea5" title="All diagnostic information.">SCF_VERBOSE_ALL</a>             = ~0      
<a name="l00722"></a>00722 };
<a name="l00723"></a>00723 
<a name="l00739"></a>00739 CS_CRYSTALSPACE_EXPORT <span class="keywordtype">void</span> <a class="code" href="group__scf.html#ge2da054d4d141e63e22aac6a78e7211a" title="This function should be called to initialize client SCF library.">scfInitialize</a>(<a class="code" href="classcsPathsList.html" title="Class to manage a list of paths.">csPathsList</a> <span class="keyword">const</span>* pluginPaths,
<a name="l00740"></a>00740   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> verbose = <a class="code" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e103bd7d223adbf6f6320c245ac38d6bc" title="No diagnostic information.">SCF_VERBOSE_NONE</a>);
<a name="l00741"></a>00741 
<a name="l00746"></a>00746 CS_CRYSTALSPACE_EXPORT <span class="keywordtype">void</span> <a class="code" href="group__scf.html#ge2da054d4d141e63e22aac6a78e7211a" title="This function should be called to initialize client SCF library.">scfInitialize</a>(<span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> argv[]);
<a name="l00747"></a>00747 
<a name="l00749"></a>00749 
<a name="l00755"></a>00755 CS_CRYSTALSPACE_EXPORT <span class="keywordtype">void</span> <a class="code" href="group__scf.html#g229540542f2e13fbda9702b00fe5d04a" title="Register a static class.">scfRegisterStaticClass</a> (<a class="code" href="group__scf.html#gead94ba73ae2e569a89ea7d5aa20db9d" title="Type of factory function which creates an instance of an SCF class.">scfFactoryFunc</a>, 
<a name="l00756"></a>00756   <span class="keyword">const</span> <span class="keywordtype">char</span> *iClassID, <span class="keyword">const</span> <span class="keywordtype">char</span> *Description, 
<a name="l00757"></a>00757   <span class="keyword">const</span> <span class="keywordtype">char</span> *Dependencies = 0);
<a name="l00758"></a>00758 CS_CRYSTALSPACE_EXPORT <span class="keywordtype">void</span> <a class="code" href="group__scf.html#g0ad0a0030e5910037392ab6e4984f8ff" title="Register a static class.">scfRegisterStaticClasses</a> (<span class="keywordtype">char</span> <span class="keyword">const</span>* xml);
<a name="l00759"></a>00759 CS_CRYSTALSPACE_EXPORT <span class="keywordtype">void</span> <a class="code" href="group__scf.html#gdf22686621a246ba1de548575f3fc029" title="Register a static class.">scfRegisterStaticFactoryFunc</a> (<a class="code" href="group__scf.html#gead94ba73ae2e569a89ea7d5aa20db9d" title="Type of factory function which creates an instance of an SCF class.">scfFactoryFunc</a>, 
<a name="l00760"></a>00760   <span class="keyword">const</span> <span class="keywordtype">char</span> *FactClass);
<a name="l00762"></a>00762   
<a name="l00763"></a>00763 <span class="comment">//---------- IMPLEMENTATION OF HELPER FUNCTIONS</span>
<a name="l00764"></a>00764 
<a name="l00765"></a>00765 
<a name="l00766"></a>00766 
<a name="l00770"></a>00770 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Interface, <span class="keyword">class</span> ClassPtr&gt;
<a name="l00771"></a><a class="code" href="group__scf.html#g2e8cf383ca5045f2b0c05374ff0107c3">00771</a> <span class="keyword">inline</span> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr&lt;Interface&gt;</a> <a class="code" href="group__scf.html#g2e8cf383ca5045f2b0c05374ff0107c3" title="Helper function around iBase::QueryInterface.">scfQueryInterface</a> (ClassPtr <span class="keywordtype">object</span>)
<a name="l00772"></a>00772 {
<a name="l00773"></a>00773   Interface *x = (Interface*)object-&gt;QueryInterface (
<a name="l00774"></a>00774     <a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits&lt;Interface&gt;::GetID</a> (),
<a name="l00775"></a>00775     <a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits&lt;Interface&gt;::GetVersion</a> ());
<a name="l00776"></a>00776   <span class="keywordflow">return</span> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr&lt;Interface&gt;</a> (x);
<a name="l00777"></a>00777 }
<a name="l00778"></a>00778 
<a name="l00779"></a>00779 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Interface, <span class="keyword">class</span> ClassPtr&gt;
<a name="l00780"></a>00780 <span class="keyword">inline</span> <a class="code" href="cssysdef_8h.html#69b27a22db26f4a2bb7a26a85d2ab06b" title="A variant of CS_DEPRECATED_METHOD that also emits the message msg on compilers that...">CS_DEPRECATED_METHOD_MSG</a> (<span class="stringliteral">"SCF_QUERY_INTERFACE macro is deprecated"</span>)
<a name="l00781"></a><a class="code" href="group__scf.html#g98c632b9063c1700ee76f65f077812f5">00781</a> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a>&lt;Interface&gt; <a class="code" href="group__scf.html#g98c632b9063c1700ee76f65f077812f5">SCF_QUERY_INTERFACE_is_deprecated</a> (ClassPtr <span class="keywordtype">object</span>)
<a name="l00782"></a>00782 {
<a name="l00783"></a>00783   <span class="keywordflow">return</span> scfQueryInterface&lt;Interface&gt; (object);
<a name="l00784"></a>00784 }
<a name="l00788"></a><a class="code" href="group__scf.html#g4866d026c88c980b43d36906766c5db6">00788</a> <span class="preprocessor">#define SCF_QUERY_INTERFACE(Object,Interface) \</span>
<a name="l00789"></a>00789 <span class="preprocessor">  SCF_QUERY_INTERFACE_is_deprecated&lt;Interface&gt; (Object)</span>
<a name="l00790"></a>00790 <span class="preprocessor"></span>
<a name="l00795"></a>00795 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Interface, <span class="keyword">class</span> ClassPtr&gt;
<a name="l00796"></a><a class="code" href="group__scf.html#g00cb2faae8bcba56ca1f5cd3a887aa14">00796</a> <span class="keyword">inline</span> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr&lt;Interface&gt;</a> <a class="code" href="group__scf.html#g00cb2faae8bcba56ca1f5cd3a887aa14" title="Helper function around iBase::QueryInterface which also does null-check of object...">scfQueryInterfaceSafe</a> (ClassPtr <span class="keywordtype">object</span>)
<a name="l00797"></a>00797 {
<a name="l00798"></a>00798   <span class="keywordflow">if</span> (<span class="keywordtype">object</span> == 0) <span class="keywordflow">return</span> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr&lt;Interface&gt;</a> (0);
<a name="l00799"></a>00799 
<a name="l00800"></a>00800   Interface *x = (Interface*)object-&gt;QueryInterface (
<a name="l00801"></a>00801     <a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits&lt;Interface&gt;::GetID</a> (),
<a name="l00802"></a>00802     <a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits&lt;Interface&gt;::GetVersion</a> ());
<a name="l00803"></a>00803   <span class="keywordflow">return</span> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr&lt;Interface&gt;</a> (x);
<a name="l00804"></a>00804 }
<a name="l00805"></a>00805 
<a name="l00806"></a>00806 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Interface, <span class="keyword">class</span> ClassPtr&gt;
<a name="l00807"></a>00807 <span class="keyword">inline</span> <a class="code" href="cssysdef_8h.html#69b27a22db26f4a2bb7a26a85d2ab06b" title="A variant of CS_DEPRECATED_METHOD that also emits the message msg on compilers that...">CS_DEPRECATED_METHOD_MSG</a> (<span class="stringliteral">"SCF_QUERY_INTERFACE_SAFE macro is deprecated"</span>)
<a name="l00808"></a><a class="code" href="group__scf.html#g5cf816e784905889b151d236cf8fa0d2">00808</a> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a>&lt;Interface&gt; <a class="code" href="group__scf.html#g5cf816e784905889b151d236cf8fa0d2">SCF_QUERY_INTERFACE_SAFE_is_deprecated</a> (ClassPtr <span class="keywordtype">object</span>)
<a name="l00809"></a>00809 {
<a name="l00810"></a>00810   <span class="keywordflow">return</span> scfQueryInterfaceSafe&lt;Interface&gt; (object);
<a name="l00811"></a>00811 }
<a name="l00815"></a><a class="code" href="group__scf.html#gac32ddfef9f398f67f794f52f2700f22">00815</a> <span class="preprocessor">#define SCF_QUERY_INTERFACE_SAFE(Object,Interface) \</span>
<a name="l00816"></a>00816 <span class="preprocessor">  SCF_QUERY_INTERFACE_SAFE_is_deprecated&lt;Interface&gt; (Object)</span>
<a name="l00817"></a>00817 <span class="preprocessor"></span>
<a name="l00821"></a>00821 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Interface&gt;
<a name="l00822"></a><a class="code" href="group__scf.html#ge034563962e9f68c4310476b40f45884">00822</a> <span class="keyword">inline</span> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr&lt;Interface&gt;</a> <a class="code" href="group__scf.html#ge034563962e9f68c4310476b40f45884" title="Handy function to create an instance of a shared class.">scfCreateInstance</a> (<span class="keywordtype">char</span> <span class="keyword">const</span> * <span class="keyword">const</span> ClassID)
<a name="l00823"></a>00823 {
<a name="l00824"></a>00824   <a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> *base = <a class="code" href="structiSCF.html#64db1d2d25a1eca49ddefe6922c41e8e" title="This is the global instance of iSCF.">iSCF::SCF</a>-&gt;<a class="code" href="structiSCF.html#db5085a0ef2207751473e41a1204ef52" title="Create an instance of a class that supports given interface.">CreateInstance</a> (ClassID);
<a name="l00825"></a>00825 
<a name="l00826"></a>00826   <span class="keywordflow">if</span> (base == 0) <span class="keywordflow">return</span> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr&lt;Interface&gt;</a> (0);
<a name="l00827"></a>00827 
<a name="l00828"></a>00828   Interface *x = (Interface*)base-&gt;<a class="code" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">QueryInterface</a> (
<a name="l00829"></a>00829     <a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits&lt;Interface&gt;::GetID</a> (),
<a name="l00830"></a>00830     <a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits&lt;Interface&gt;::GetVersion</a> ());
<a name="l00831"></a>00831 
<a name="l00832"></a>00832   <span class="keywordflow">if</span> (x) base-&gt;<a class="code" href="structiBase.html#3a44d46ca155e6ab0c0179db01011bb0" title="Decrement the reference count.">DecRef</a> (); <span class="comment">//release our base interface</span>
<a name="l00833"></a>00833   <span class="keywordflow">return</span> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr&lt;Interface&gt;</a> (x);
<a name="l00834"></a>00834 }
<a name="l00835"></a>00835 
<a name="l00836"></a>00836 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Interface&gt;
<a name="l00837"></a>00837 <span class="keyword">inline</span> <a class="code" href="cssysdef_8h.html#69b27a22db26f4a2bb7a26a85d2ab06b" title="A variant of CS_DEPRECATED_METHOD that also emits the message msg on compilers that...">CS_DEPRECATED_METHOD_MSG</a> (<span class="stringliteral">"SCF_CREATE_INSTANCE macro is deprecated"</span>)
<a name="l00838"></a><a class="code" href="group__scf.html#gcf034213f44f64d75d5bd2e437ce19eb">00838</a> <a class="code" href="classcsPtr.html" title="A pointer encapsulator.">csPtr</a>&lt;Interface&gt; <a class="code" href="group__scf.html#gcf034213f44f64d75d5bd2e437ce19eb">SCF_CREATE_INSTANCE_is_deprecated</a> (
<a name="l00839"></a>00839   <span class="keywordtype">char</span> const * const ClassID)
<a name="l00840"></a>00840 {
<a name="l00841"></a>00841   <span class="keywordflow">return</span> scfCreateInstance&lt;Interface&gt; (ClassID);
<a name="l00842"></a>00842 }
<a name="l00846"></a><a class="code" href="group__scf.html#g5b0b8a41841a8901731fdd009b8727eb">00846</a> <span class="preprocessor">#define SCF_CREATE_INSTANCE(ClassID,Interface) \</span>
<a name="l00847"></a>00847 <span class="preprocessor">  SCF_CREATE_INSTANCE_is_deprecated&lt;Interface&gt; (ClassID)</span>
<a name="l00848"></a>00848 <span class="preprocessor"></span>
<a name="l00849"></a>00849 <span class="comment">// Give versions to above declared classes.</span>
<a name="l00850"></a>00850 <a class="code" href="group__scf.html#g654bebfc58b1e4e2c9ef9c6334139c73" title="FOR COMPATIBILITY! SCF_VERSION can be used to define an interface&amp;#39;s version number;...">SCF_VERSION</a> (<a class="code" href="structiFactory.html" title="iFactory is an interface that is used to create instances of shared classes.">iFactory</a>, 0, 0, 2);
<a name="l00851"></a>00851 
<a name="l00852"></a>00852 <span class="comment">// A bit hacky.</span>
<a name="l00853"></a>00853 <span class="preprocessor">#include "<a class="code" href="reftrackeraccess_8h.html" title="Reference tracker access.">csutil/reftrackeraccess.h</a>"</span>
<a name="l00854"></a>00854 
<a name="l00857"></a>00857 <span class="preprocessor">#endif // __CSSCF_H__</span>
</pre></div><hr size="1"><address><small>Generated for Crystal Space 1.2.1 by 
<a href="http://www.doxygen.org/index.html">doxygen</a> 1.5.3 
</small></address> </div></body> </html>