A task management system. At least this was the initial idea. Basically this it the base code for the taskrambler framework.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

670 lines
36 KiB

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Server: include/class/class.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.7.3 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Server&#160;<span id="projectnumber">0.0.1</span></div>
<div id="projectbrief">HTTP/REST server implementation</div>
</td>
</tr>
</tbody>
</table>
</div>
<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="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li id="searchli">
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</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>Globals</span></a></li>
</ul>
</div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
initNavTree('class_2class_8h.html','');
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#typedef-members">Typedefs</a> </div>
<div class="headertitle">
<h1>include/class/class.h File Reference</h1> </div>
</div>
<div class="contents">
<div class="textblock"><code>#include &lt;stdarg.h&gt;</code><br/>
<code>#include &lt;sys/types.h&gt;</code><br/>
<code>#include &lt;string.h&gt;</code><br/>
<code>#include &lt;assert.h&gt;</code><br/>
<code>#include &quot;class/interface.h&quot;</code><br/>
</div><div class="textblock"><div class="dynheader">
Include dependency graph for class.h:</div>
<div class="dyncontent">
<div class="center"><img src="class_2class_8h__incl.png" border="0" usemap="#include_2class_2class_8h" alt=""/></div>
<map name="include_2class_2class_8h" id="include_2class_2class_8h">
</map>
</div>
</div><div class="textblock"><div class="dynheader">
This graph shows which files directly or indirectly include this file:</div>
<div class="dyncontent">
<div class="center"><img src="class_2class_8h__dep__incl.png" border="0" usemap="#include_2class_2class_8hdep" alt=""/></div>
<map name="include_2class_2class_8hdep" id="include_2class_2class_8hdep">
<area shape="rect" id="node3" href="class_8h.html" title="include/class.h" alt="" coords="140,83,249,111"/><area shape="rect" id="node5" href="cbuf_8h.html" title="include/cbuf.h" alt="" coords="5,161,109,189"/><area shape="rect" id="node7" href="server_8h.html" title="include/server.h" alt="" coords="137,238,252,266"/><area shape="rect" id="node9" href="socket_8h.html" title="include/socket.h" alt="" coords="184,161,301,189"/><area shape="rect" id="node12" href="session_8h.html" title="include/session.h" alt="" coords="325,161,448,189"/></map>
</div>
</div>
<p><a href="class_2class_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclass.html">class</a></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a04ec2c53aa9fcdb5b58dc8e9d552dec0">_ISOC99_SOURCE</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a28c4c4c1ebf62795262a3553d59e8bff">CLASS_MAGIC</a>&#160;&#160;&#160;0xFEFE</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#ab12c2142e0ec3f4f19a03b3879c67f32">CLASS</a>(name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a45e588b871b5b73461805ab4a5c59aa5">EXTENDS</a>(parent)&#160;&#160;&#160;const char _[sizeof(struct c_##parent)]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#ab9f9098d95379c04d979721396dabf68">_NULL</a>&#160;&#160;&#160;NULL</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a509b4880afb25bb862c448d7a71e7afe">CREATE_CLASS</a>(name, _parent,...)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#ac7b99597686f59e4a34cd9cadd30d1d6">INIT_CLASS</a>(<a class="el" href="structclass.html">class</a>)&#160;&#160;&#160;((<a class="el" href="structclass.html">class</a>)-&gt;init? (<a class="el" href="structclass.html">class</a>)-&gt;init() : (<a class="el" href="structclass.html">class</a>))</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a97a9cde15dbb06287accf0a392b0c2ed">GET_CLASS</a>(object)&#160;&#160;&#160;(INIT_CLASS(*(<a class="el" href="structclass.html">class_ptr</a> *)((void*)(object) - sizeof(void*))))</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#adb99542d8748b5108322ccb26bb367e0">IFACE_GET</a>(<a class="el" href="structclass.html">class</a>, iface)&#160;&#160;&#160;(interfaceGet(&amp;((<a class="el" href="structclass.html">class</a>)-&gt;impl),(iface)))</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a5ea9893a0e62748b9d1154d5b77abed1">HAS_PARENT</a>(<a class="el" href="structclass.html">class</a>)&#160;&#160;&#160;(NULL != ((<a class="el" href="structclass.html">class</a>)-&gt;parent) &amp;&amp; INIT_CLASS((<a class="el" href="structclass.html">class</a>)-&gt;parent))</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#af082d22d6b335bd2ee7cf16a7b85cba3">IS_OBJECT</a>(obj)&#160;&#160;&#160;((GET_CLASS((obj)))-&gt;magic == CLASS_MAGIC)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#ac0ac189d082986b87d215d5423da80a3">INSTANCE_OF</a>(<a class="el" href="structclass.html">class</a>, obj)&#160;&#160;&#160;((GET_CLASS((obj))) == _##<a class="el" href="structclass.html">class</a>)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a99192587726791d3fc572b54986794d5">_CALL</a>(_class, _iface, method,...)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#ada752d9d1fdbf84e978606e8999c762d">CALL</a>(object, _iface, method,...)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a06fb0f2e08d1cbacbed6784319e7c3fc">RETCALL</a>(object, _iface, method, ret,...)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#ab6391ca75b58104db1fc948f2e066e8d">PARENTCALL</a>(object, _iface, method,...)</td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structclass.html">class</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#a68df9f6e346c5fad9f61bb2557d1d832">class_ptr</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structclass.html">class_ptr</a>(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_2class_8h.html#ab52c459c2835deaf920d45ff67b5f591">fptr_classInit</a> )(void)</td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>My own class implementation for C. It combines a data structure with a set of dynamically linked methods defined by an interface. A dynamically linked method will be called via a selector method which in turn gets the implementation stored in the class.</p>
<dl class="author"><dt><b>Author:</b></dt><dd>Georg Hopp</dd></dl>
<p>Copyright © 2012 Georg Hopp</p>
<p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</p>
<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p>
<p>You should have received a copy of the GNU General Public License along with this program. If not, see &lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;. </p>
<p>Definition in file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div><hr/><h2>Define Documentation</h2>
<a class="anchor" id="a99192587726791d3fc572b54986794d5"></a><!-- doxytag: member="class.h::_CALL" ref="a99192587726791d3fc572b54986794d5" args="(_class, _iface, method,...)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _CALL</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">_class, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_iface, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">method, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
<a class="code" href="structclass.html">class_ptr</a> <span class="keyword">class </span>= _class; \
iface = (<span class="keyword">struct </span>i_##_iface *)<a class="code" href="class_2class_8h.html#adb99542d8748b5108322ccb26bb367e0">IFACE_GET</a>(<span class="keyword">class</span>, &amp;i_##_iface); \
<span class="keywordflow">while</span> ((NULL == iface || NULL == iface-&gt;method) &amp;&amp; <a class="code" href="class_2class_8h.html#a5ea9893a0e62748b9d1154d5b77abed1">HAS_PARENT</a>(<span class="keyword">class</span>)) { \
<span class="keyword">class </span>= <a class="code" href="structclass.html">class</a>-&gt;<a class="code" href="structclass.html#a97f697cb86be7a39d4477e971074ae6e">parent</a>; \
iface = (<span class="keyword">struct </span>i_##_iface *)<a class="code" href="class_2class_8h.html#adb99542d8748b5108322ccb26bb367e0">IFACE_GET</a>(<span class="keyword">class</span>, &amp;i_##_iface); \
} \
assert(NULL != iface-&gt;method); \
} <span class="keywordflow">while</span>(0)
</pre></div><dl class="todo"><dt><b><a class="el" href="todo.html#_todo000001">Todo:</a></b></dt><dd>actually i use gcc feature ## for variadoc... think about a way to make this standard. </dd></dl>
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00080">80</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="a04ec2c53aa9fcdb5b58dc8e9d552dec0"></a><!-- doxytag: member="class.h::_ISOC99_SOURCE" ref="a04ec2c53aa9fcdb5b58dc8e9d552dec0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _ISOC99_SOURCE</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00038">38</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="ab9f9098d95379c04d979721396dabf68"></a><!-- doxytag: member="class.h::_NULL" ref="ab9f9098d95379c04d979721396dabf68" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _NULL&#160;&#160;&#160;NULL</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00052">52</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="ada752d9d1fdbf84e978606e8999c762d"></a><!-- doxytag: member="class.h::CALL" ref="ada752d9d1fdbf84e978606e8999c762d" args="(object, _iface, method,...)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CALL</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">object, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_iface, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">method, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
<span class="keyword">struct </span>i_##_iface * iface; \
<a class="code" href="class_2class_8h.html#a99192587726791d3fc572b54986794d5">_CALL</a>(<a class="code" href="class_2class_8h.html#a97a9cde15dbb06287accf0a392b0c2ed">GET_CLASS</a>(<span class="keywordtype">object</span>), _iface, method, ##__VA_ARGS__); \
iface-&gt;method(<span class="keywordtype">object</span>, ##__VA_ARGS__); \
} <span class="keywordflow">while</span>(0)
</pre></div>
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00091">91</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="ab12c2142e0ec3f4f19a03b3879c67f32"></a><!-- doxytag: member="class.h::CLASS" ref="ab12c2142e0ec3f4f19a03b3879c67f32" args="(name)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CLASS</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">name</td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">struct </span>c_##name; \
<span class="keyword">typedef</span> <span class="keyword">struct </span>c_##name * name; \
<span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="structclass.html">class</a> * <span class="keyword">const</span> _##name; \
<span class="keyword">struct </span>c_##name
</pre></div>
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00043">43</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="a28c4c4c1ebf62795262a3553d59e8bff"></a><!-- doxytag: member="class.h::CLASS_MAGIC" ref="a28c4c4c1ebf62795262a3553d59e8bff" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CLASS_MAGIC&#160;&#160;&#160;0xFEFE</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00041">41</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="a509b4880afb25bb862c448d7a71e7afe"></a><!-- doxytag: member="class.h::CREATE_CLASS" ref="a509b4880afb25bb862c448d7a71e7afe" args="(name, _parent,...)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define CREATE_CLASS</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">name, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_parent, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structclass.html">class</a> c_##name; \
<span class="keyword">static</span> <a class="code" href="structclass.html">class_ptr</a> _classInit##name##_(<span class="keywordtype">void</span>) { \
c_##name.<a class="code" href="structclass.html#a97f697cb86be7a39d4477e971074ae6e">parent</a> = _##_parent; \
c_##name.<a class="code" href="structclass.html#a744967ad02b74a9464c1224c7fa05b23">init</a> = NULL; \
<span class="keywordflow">return</span> &amp;c_##name; \
} \
<span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structclass.html">class</a> c_##name = { \
<a class="code" href="class_2class_8h.html#a28c4c4c1ebf62795262a3553d59e8bff">CLASS_MAGIC</a>, \
NULL, \
<span class="keyword">sizeof</span>(<span class="keyword">struct </span>c_##name), \
_classInit##name##_, \
<a class="code" href="interface_8h.html#a23a3c2be665a85b7e5f0844c9826a5b9">INIT_IFACE_IMPL</a>(__VA_ARGS__) \
}; <span class="keyword">struct </span><a class="code" href="structclass.html">class</a> * <span class="keyword">const</span> _##name = &amp;c_##name
</pre></div>
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00053">53</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="a45e588b871b5b73461805ab4a5c59aa5"></a><!-- doxytag: member="class.h::EXTENDS" ref="a45e588b871b5b73461805ab4a5c59aa5" args="(parent)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define EXTENDS</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">parent</td><td>)</td>
<td>&#160;&#160;&#160;const char _[sizeof(struct c_##parent)]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00049">49</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="a97a9cde15dbb06287accf0a392b0c2ed"></a><!-- doxytag: member="class.h::GET_CLASS" ref="a97a9cde15dbb06287accf0a392b0c2ed" args="(object)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define GET_CLASS</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">object</td><td>)</td>
<td>&#160;&#160;&#160;(INIT_CLASS(*(<a class="el" href="structclass.html">class_ptr</a> *)((void*)(object) - sizeof(void*))))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00069">69</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="a5ea9893a0e62748b9d1154d5b77abed1"></a><!-- doxytag: member="class.h::HAS_PARENT" ref="a5ea9893a0e62748b9d1154d5b77abed1" args="(class)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define HAS_PARENT</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><a class="el" href="structclass.html">class</a></td><td>)</td>
<td>&#160;&#160;&#160;(NULL != ((<a class="el" href="structclass.html">class</a>)-&gt;parent) &amp;&amp; INIT_CLASS((<a class="el" href="structclass.html">class</a>)-&gt;parent))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00071">71</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="adb99542d8748b5108322ccb26bb367e0"></a><!-- doxytag: member="class.h::IFACE_GET" ref="adb99542d8748b5108322ccb26bb367e0" args="(class, iface)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define IFACE_GET</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><a class="el" href="structclass.html">class</a>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">iface&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;(interfaceGet(&amp;((<a class="el" href="structclass.html">class</a>)-&gt;impl),(iface)))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00070">70</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="ac7b99597686f59e4a34cd9cadd30d1d6"></a><!-- doxytag: member="class.h::INIT_CLASS" ref="ac7b99597686f59e4a34cd9cadd30d1d6" args="(class)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define INIT_CLASS</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><a class="el" href="structclass.html">class</a></td><td>)</td>
<td>&#160;&#160;&#160;((<a class="el" href="structclass.html">class</a>)-&gt;init? (<a class="el" href="structclass.html">class</a>)-&gt;init() : (<a class="el" href="structclass.html">class</a>))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00068">68</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="ac0ac189d082986b87d215d5423da80a3"></a><!-- doxytag: member="class.h::INSTANCE_OF" ref="ac0ac189d082986b87d215d5423da80a3" args="(class, obj)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define INSTANCE_OF</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><a class="el" href="structclass.html">class</a>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">obj&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>&#160;&#160;&#160;((GET_CLASS((obj))) == _##<a class="el" href="structclass.html">class</a>)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00074">74</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="af082d22d6b335bd2ee7cf16a7b85cba3"></a><!-- doxytag: member="class.h::IS_OBJECT" ref="af082d22d6b335bd2ee7cf16a7b85cba3" args="(obj)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define IS_OBJECT</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">obj</td><td>)</td>
<td>&#160;&#160;&#160;((GET_CLASS((obj)))-&gt;magic == CLASS_MAGIC)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00073">73</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="ab6391ca75b58104db1fc948f2e066e8d"></a><!-- doxytag: member="class.h::PARENTCALL" ref="ab6391ca75b58104db1fc948f2e066e8d" args="(object, _iface, method,...)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define PARENTCALL</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">object, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_iface, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">method, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
<span class="keyword">struct </span>i_##_iface * iface; \
<a class="code" href="structclass.html">class_ptr</a> pc_class = <a class="code" href="class_2class_8h.html#a97a9cde15dbb06287accf0a392b0c2ed">GET_CLASS</a>((<span class="keywordtype">object</span>)); \
assert(<a class="code" href="class_2class_8h.html#a5ea9893a0e62748b9d1154d5b77abed1">HAS_PARENT</a>(pc_class)); \
<a class="code" href="class_2class_8h.html#a99192587726791d3fc572b54986794d5">_CALL</a>(pc_class-&gt;<a class="code" href="structclass.html#a97f697cb86be7a39d4477e971074ae6e">parent</a>, _iface, method, ##__VA_ARGS__); \
iface-&gt;method(<span class="keywordtype">object</span>, ##__VA_ARGS__); \
} <span class="keywordflow">while</span>(0)
</pre></div>
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00105">105</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="a06fb0f2e08d1cbacbed6784319e7c3fc"></a><!-- doxytag: member="class.h::RETCALL" ref="a06fb0f2e08d1cbacbed6784319e7c3fc" args="(object, _iface, method, ret,...)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define RETCALL</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">object, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">_iface, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">method, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">ret, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
<span class="keyword">struct </span>i_##_iface * iface; \
<a class="code" href="class_2class_8h.html#a99192587726791d3fc572b54986794d5">_CALL</a>(<a class="code" href="class_2class_8h.html#a97a9cde15dbb06287accf0a392b0c2ed">GET_CLASS</a>(<span class="keywordtype">object</span>), _iface, method, ##__VA_ARGS__); \
ret = iface-&gt;method(<span class="keywordtype">object</span>, ##__VA_ARGS__); \
} <span class="keywordflow">while</span>(0)
</pre></div>
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00098">98</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="a68df9f6e346c5fad9f61bb2557d1d832"></a><!-- doxytag: member="class.h::class_ptr" ref="a68df9f6e346c5fad9f61bb2557d1d832" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="structclass.html">class</a>* <a class="el" href="structclass.html">class_ptr</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00116">116</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
<a class="anchor" id="ab52c459c2835deaf920d45ff67b5f591"></a><!-- doxytag: member="class.h::fptr_classInit" ref="ab52c459c2835deaf920d45ff67b5f591" args=")(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structclass.html">class_ptr</a>(* <a class="el" href="class_2class_8h.html#ab52c459c2835deaf920d45ff67b5f591">fptr_classInit</a>)(void)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="class_2class_8h_source.html#l00117">117</a> of file <a class="el" href="class_2class_8h_source.html">class.h</a>.</p>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="class_2class_8h.html">class.h</a> </li>
<li class="footer">Generated on Wed Mar 28 2012 10:39:44 for Server by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </li>
</ul>
</div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Defines</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</body>
</html>