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.
 
 
 
 
 
 

210 lines
18 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 Source File</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="headertitle">
<h1>include/class/class.h</h1> </div>
</div>
<div class="contents">
<a href="class_2class_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
<a name="l00027"></a>00027 <span class="preprocessor">#ifndef __CLASS_CLASS_H__</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define __CLASS_CLASS_H__</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;stdarg.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;assert.h&gt;</span>
<a name="l00034"></a>00034
<a name="l00035"></a>00035 <span class="preprocessor">#include &quot;class/interface.h&quot;</span>
<a name="l00036"></a>00036
<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _ISOC99_SOURCE</span>
<a name="l00038"></a><a class="code" href="class_2class_8h.html#a04ec2c53aa9fcdb5b58dc8e9d552dec0">00038</a> <span class="preprocessor"></span><span class="preprocessor">#define _ISOC99_SOURCE</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span>
<a name="l00041"></a><a class="code" href="class_2class_8h.html#a28c4c4c1ebf62795262a3553d59e8bff">00041</a> <span class="preprocessor">#define CLASS_MAGIC 0xFEFE</span>
<a name="l00042"></a>00042 <span class="preprocessor"></span>
<a name="l00043"></a><a class="code" href="class_2class_8h.html#ab12c2142e0ec3f4f19a03b3879c67f32">00043</a> <span class="preprocessor">#define CLASS(name) \</span>
<a name="l00044"></a>00044 <span class="preprocessor"> struct c_##name; \</span>
<a name="l00045"></a>00045 <span class="preprocessor"> typedef struct c_##name * name; \</span>
<a name="l00046"></a>00046 <span class="preprocessor"> extern struct class * const _##name; \</span>
<a name="l00047"></a>00047 <span class="preprocessor"> struct c_##name</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span>
<a name="l00049"></a><a class="code" href="class_2class_8h.html#a45e588b871b5b73461805ab4a5c59aa5">00049</a> <span class="preprocessor">#define EXTENDS(parent) \</span>
<a name="l00050"></a>00050 <span class="preprocessor"> const char _[sizeof(struct c_##parent)]</span>
<a name="l00051"></a>00051 <span class="preprocessor"></span>
<a name="l00052"></a><a class="code" href="class_2class_8h.html#ab9f9098d95379c04d979721396dabf68">00052</a> <span class="preprocessor">#define _NULL NULL</span>
<a name="l00053"></a><a class="code" href="class_2class_8h.html#a509b4880afb25bb862c448d7a71e7afe">00053</a> <span class="preprocessor"></span><span class="preprocessor">#define CREATE_CLASS(name,_parent,...) \</span>
<a name="l00054"></a>00054 <span class="preprocessor"> static struct class c_##name; \</span>
<a name="l00055"></a>00055 <span class="preprocessor"> static class_ptr _classInit##name##_(void) { \</span>
<a name="l00056"></a>00056 <span class="preprocessor"> c_##name.parent = _##_parent; \</span>
<a name="l00057"></a>00057 <span class="preprocessor"> c_##name.init = NULL; \</span>
<a name="l00058"></a>00058 <span class="preprocessor"> return &amp;c_##name; \</span>
<a name="l00059"></a>00059 <span class="preprocessor"> } \</span>
<a name="l00060"></a>00060 <span class="preprocessor"> static struct class c_##name = { \</span>
<a name="l00061"></a>00061 <span class="preprocessor"> CLASS_MAGIC, \</span>
<a name="l00062"></a>00062 <span class="preprocessor"> NULL, \</span>
<a name="l00063"></a>00063 <span class="preprocessor"> sizeof(struct c_##name), \</span>
<a name="l00064"></a>00064 <span class="preprocessor"> _classInit##name##_, \</span>
<a name="l00065"></a>00065 <span class="preprocessor"> INIT_IFACE_IMPL(__VA_ARGS__) \</span>
<a name="l00066"></a>00066 <span class="preprocessor"> }; struct class * const _##name = &amp;c_##name</span>
<a name="l00067"></a>00067 <span class="preprocessor"></span>
<a name="l00068"></a><a class="code" href="class_2class_8h.html#ac7b99597686f59e4a34cd9cadd30d1d6">00068</a> <span class="preprocessor">#define INIT_CLASS(class) ((class)-&gt;init? (class)-&gt;init() : (class))</span>
<a name="l00069"></a><a class="code" href="class_2class_8h.html#a97a9cde15dbb06287accf0a392b0c2ed">00069</a> <span class="preprocessor"></span><span class="preprocessor">#define GET_CLASS(object) (INIT_CLASS(*(class_ptr *)((void*)(object) - sizeof(void*))))</span>
<a name="l00070"></a><a class="code" href="class_2class_8h.html#adb99542d8748b5108322ccb26bb367e0">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define IFACE_GET(class,iface) (interfaceGet(&amp;((class)-&gt;impl),(iface)))</span>
<a name="l00071"></a><a class="code" href="class_2class_8h.html#a5ea9893a0e62748b9d1154d5b77abed1">00071</a> <span class="preprocessor"></span><span class="preprocessor">#define HAS_PARENT(class) (NULL != ((class)-&gt;parent) &amp;&amp; INIT_CLASS((class)-&gt;parent))</span>
<a name="l00072"></a>00072 <span class="preprocessor"></span>
<a name="l00073"></a><a class="code" href="class_2class_8h.html#af082d22d6b335bd2ee7cf16a7b85cba3">00073</a> <span class="preprocessor">#define IS_OBJECT(obj) ((GET_CLASS((obj)))-&gt;magic == CLASS_MAGIC)</span>
<a name="l00074"></a><a class="code" href="class_2class_8h.html#ac0ac189d082986b87d215d5423da80a3">00074</a> <span class="preprocessor"></span><span class="preprocessor">#define INSTANCE_OF(class,obj) ((GET_CLASS((obj))) == _##class)</span>
<a name="l00075"></a>00075 <span class="preprocessor"></span>
<a name="l00080"></a><a class="code" href="class_2class_8h.html#a99192587726791d3fc572b54986794d5">00080</a> <span class="preprocessor">#define _CALL(_class,_iface,method,...) \</span>
<a name="l00081"></a>00081 <span class="preprocessor"> do { \</span>
<a name="l00082"></a>00082 <span class="preprocessor"> class_ptr class = _class; \</span>
<a name="l00083"></a>00083 <span class="preprocessor"> iface = (struct i_##_iface *)IFACE_GET(class, &amp;i_##_iface); \</span>
<a name="l00084"></a>00084 <span class="preprocessor"> while ((NULL == iface || NULL == iface-&gt;method) &amp;&amp; HAS_PARENT(class)) { \</span>
<a name="l00085"></a>00085 <span class="preprocessor"> class = class-&gt;parent; \</span>
<a name="l00086"></a>00086 <span class="preprocessor"> iface = (struct i_##_iface *)IFACE_GET(class, &amp;i_##_iface); \</span>
<a name="l00087"></a>00087 <span class="preprocessor"> } \</span>
<a name="l00088"></a>00088 <span class="preprocessor"> assert(NULL != iface-&gt;method); \</span>
<a name="l00089"></a>00089 <span class="preprocessor"> } while(0)</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span>
<a name="l00091"></a><a class="code" href="class_2class_8h.html#ada752d9d1fdbf84e978606e8999c762d">00091</a> <span class="preprocessor">#define CALL(object,_iface,method,...) \</span>
<a name="l00092"></a>00092 <span class="preprocessor"> do { \</span>
<a name="l00093"></a>00093 <span class="preprocessor"> struct i_##_iface * iface; \</span>
<a name="l00094"></a>00094 <span class="preprocessor"> _CALL(GET_CLASS(object), _iface, method, ##__VA_ARGS__); \</span>
<a name="l00095"></a>00095 <span class="preprocessor"> iface-&gt;method(object, ##__VA_ARGS__); \</span>
<a name="l00096"></a>00096 <span class="preprocessor"> } while(0)</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span>
<a name="l00098"></a><a class="code" href="class_2class_8h.html#a06fb0f2e08d1cbacbed6784319e7c3fc">00098</a> <span class="preprocessor">#define RETCALL(object,_iface,method,ret,...) \</span>
<a name="l00099"></a>00099 <span class="preprocessor"> do { \</span>
<a name="l00100"></a>00100 <span class="preprocessor"> struct i_##_iface * iface; \</span>
<a name="l00101"></a>00101 <span class="preprocessor"> _CALL(GET_CLASS(object), _iface, method, ##__VA_ARGS__); \</span>
<a name="l00102"></a>00102 <span class="preprocessor"> ret = iface-&gt;method(object, ##__VA_ARGS__); \</span>
<a name="l00103"></a>00103 <span class="preprocessor"> } while(0)</span>
<a name="l00104"></a>00104 <span class="preprocessor"></span>
<a name="l00105"></a><a class="code" href="class_2class_8h.html#ab6391ca75b58104db1fc948f2e066e8d">00105</a> <span class="preprocessor">#define PARENTCALL(object,_iface,method,...) \</span>
<a name="l00106"></a>00106 <span class="preprocessor"> do { \</span>
<a name="l00107"></a>00107 <span class="preprocessor"> struct i_##_iface * iface; \</span>
<a name="l00108"></a>00108 <span class="preprocessor"> class_ptr pc_class = GET_CLASS((object)); \</span>
<a name="l00109"></a>00109 <span class="preprocessor"> assert(HAS_PARENT(pc_class)); \</span>
<a name="l00110"></a>00110 <span class="preprocessor"> _CALL(pc_class-&gt;parent, _iface, method, ##__VA_ARGS__); \</span>
<a name="l00111"></a>00111 <span class="preprocessor"> iface-&gt;method(object, ##__VA_ARGS__); \</span>
<a name="l00112"></a>00112 <span class="preprocessor"> } while(0)</span>
<a name="l00113"></a>00113 <span class="preprocessor"></span>
<a name="l00114"></a>00114
<a name="l00115"></a>00115 <span class="keyword">struct </span><a class="code" href="structclass.html">class</a>;
<a name="l00116"></a><a class="code" href="class_2class_8h.html#a68df9f6e346c5fad9f61bb2557d1d832">00116</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structclass.html">class</a> * <a class="code" href="class_2class_8h.html#a68df9f6e346c5fad9f61bb2557d1d832">class_ptr</a>;
<a name="l00117"></a><a class="code" href="class_2class_8h.html#ab52c459c2835deaf920d45ff67b5f591">00117</a> <span class="keyword">typedef</span> <a class="code" href="class_2class_8h.html#a68df9f6e346c5fad9f61bb2557d1d832">class_ptr</a> (* <a class="code" href="class_2class_8h.html#ab52c459c2835deaf920d45ff67b5f591">fptr_classInit</a>)(void);
<a name="l00118"></a><a class="code" href="structclass.html">00118</a> <span class="keyword">struct </span><a class="code" href="structclass.html">class</a> {
<a name="l00119"></a><a class="code" href="structclass.html#a395a6874758c92188945df7c070f5ff1">00119</a> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="structclass.html#a395a6874758c92188945df7c070f5ff1">magic</a>;
<a name="l00120"></a><a class="code" href="structclass.html#a97f697cb86be7a39d4477e971074ae6e">00120</a> class_ptr <a class="code" href="structclass.html#a97f697cb86be7a39d4477e971074ae6e">parent</a>;
<a name="l00121"></a><a class="code" href="structclass.html#a31f0b35f94229885e948d55bac214c0d">00121</a> <span class="keywordtype">size_t</span> <a class="code" href="structclass.html#a31f0b35f94229885e948d55bac214c0d">object_size</a>;
<a name="l00122"></a><a class="code" href="structclass.html#a744967ad02b74a9464c1224c7fa05b23">00122</a> <a class="code" href="class_2class_8h.html#ab52c459c2835deaf920d45ff67b5f591">fptr_classInit</a> <a class="code" href="structclass.html#a744967ad02b74a9464c1224c7fa05b23">init</a>;
<a name="l00123"></a>00123 <span class="keyword">struct </span><a class="code" href="structiface__impl.html">iface_impl</a> <a class="code" href="structiface__impl.html#a4f3e0d7f7bbd7e3f98472a140c37c1ea">impl</a>;
<a name="l00124"></a>00124 };
<a name="l00125"></a>00125
<a name="l00126"></a>00126 <span class="preprocessor">#endif // __CLASS_CLASS_H__</span>
<a name="l00127"></a>00127 <span class="preprocessor"></span>
<a name="l00128"></a>00128 <span class="comment">// vim: set ts=4 sw=4:</span>
</pre></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:43 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>