Sophie

Sophie

distrib > Mandriva > 10.0-com > i586 > by-pkgid > af7a4b7f1ee5a4a084c41b9005da5527 > files > 340

libfox1.1_46-devel-1.1.46-1mdk.i586.rpm

<html>
<head>
<link rel="stylesheet" href="page.css" type="text/css">
<title>fox-toolkit.org - Documentation</title>
</head>
<body bgcolor=#ffffff link=#990033 vlink=#990033 alink=#990033 text=#000000>
<font face='verdana,sans-serif' size=2 >

<!---- TOPIC TITLE WITH LOGO--->
<table border=0 cellpadding= cellspacing=2 width=100% ><tr><td><a href='http://www.fox-toolkit.org/doc.html'><img src='../art/foxlogo_small.jpg' border=0></a></td><td width=100% valign=bottom><font face='verdana,sans-serif' size=2 ><b>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a>
<br><img src='../art/line.gif' width=100% height=1></b></font></td></tr></table>
<p>
<!--- TOPIC TITLE WITH LOGO --->
<!-- Generated by Doxygen 1.3.3 -->
<h1>FXElement.h</h1><div class="fragment"><pre>00001 <span class="comment">/********************************************************************************</span>
00002 <span class="comment">*                                                                               *</span>
00003 <span class="comment">*                           Generic Element Handling                            *</span>
00004 <span class="comment">*                                                                               *</span>
00005 <span class="comment">*********************************************************************************</span>
00006 <span class="comment">* Copyright (C) 1997,2004 by Jeroen van der Zijp.   All Rights Reserved.        *</span>
00007 <span class="comment">*********************************************************************************</span>
00008 <span class="comment">* This library is free software; you can redistribute it and/or                 *</span>
00009 <span class="comment">* modify it under the terms of the GNU Lesser General Public                    *</span>
00010 <span class="comment">* License as published by the Free Software Foundation; either                  *</span>
00011 <span class="comment">* version 2.1 of the License, or (at your option) any later version.            *</span>
00012 <span class="comment">*                                                                               *</span>
00013 <span class="comment">* This library is distributed in the hope that it will be useful,               *</span>
00014 <span class="comment">* but WITHOUT ANY WARRANTY; without even the implied warranty of                *</span>
00015 <span class="comment">* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU             *</span>
00016 <span class="comment">* Lesser General Public License for more details.                               *</span>
00017 <span class="comment">*                                                                               *</span>
00018 <span class="comment">* You should have received a copy of the GNU Lesser General Public              *</span>
00019 <span class="comment">* License along with this library; if not, write to the Free Software           *</span>
00020 <span class="comment">* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.    *</span>
00021 <span class="comment">*********************************************************************************</span>
00022 <span class="comment">* $Id: FXElement.h,v 1.13 2004/02/08 17:17:33 fox Exp $                         *</span>
00023 <span class="comment">********************************************************************************/</span>
00024 <span class="preprocessor">#ifndef FXELEMENT_H</span>
00025 <span class="preprocessor"></span><span class="preprocessor">#define FXELEMENT_H</span>
00026 <span class="preprocessor"></span>
00027 <span class="keyword">namespace </span>FX {
00028 
00029 <span class="comment">/****************************  D e f i n i t i o n  ****************************/</span>
00030 
00031 <span class="comment">// Generic implementations for generic objects</span>
00032 
00033 
00034 <span class="comment">// Construct some elements at a location</span>
00035 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00036 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(TYPE* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00037   <span class="keywordflow">while</span>(n--){ ::new ((<span class="keywordtype">void</span>*)ptr) TYPE; ptr++; }
00038   }
00039 
00040 
00041 <span class="comment">// Destruct some elements at a location</span>
00042 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00043 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(TYPE* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00044   <span class="keywordflow">while</span>(n--){ ptr-&gt;~TYPE(); ptr++; }
00045   }
00046 
00047 
00048 <span class="comment">// Copy some elements from one place to another</span>
00049 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00050 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(TYPE* dst,<span class="keyword">const</span> TYPE* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00051   <span class="keywordflow">while</span>(n--){ *dst++ = *src++; }
00052   }
00053 
00054 
00055 <span class="comment">// Move some elements from overlapping place to another</span>
00056 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00057 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(TYPE* dst,<span class="keyword">const</span> TYPE* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00058   <span class="keywordflow">if</span>(src&gt;dst){
00059     <span class="keywordflow">while</span>(n--){ *dst++ = *src++; }
00060     }
00061   <span class="keywordflow">else</span> <span class="keywordflow">if</span>(dst&gt;src){
00062     dst+=n;
00063     src+=n;
00064     <span class="keywordflow">while</span>(n--){ *--dst = *--src; }
00065     }
00066   }
00067 
00068 
00069 <span class="comment">// Save some elements to persistent store</span>
00070 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00071 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> TYPE* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00072   <span class="keywordflow">while</span>(n--){ store &lt;&lt; *ptr; ptr++; }
00073   }
00074 
00075 
00076 <span class="comment">// Load some elements from persistent store</span>
00077 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00078 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,TYPE* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00079   <span class="keywordflow">while</span>(n--){ store &gt;&gt; *ptr; ptr++; }
00080   }
00081 
00082 
00083 <span class="comment">// Allocate array of elements, uninitialized</span>
00084 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00085 <span class="keyword">inline</span> <span class="keywordtype">void</span> allocElms(TYPE*&amp; ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00086   fxmalloc((<span class="keywordtype">void</span>**)&amp;ptr,<span class="keyword">sizeof</span>(TYPE)*n);
00087   }
00088 
00089 
00090 <span class="comment">// Allocate array of elements, initialized with zero</span>
00091 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00092 <span class="keyword">inline</span> <span class="keywordtype">void</span> callocElms(TYPE*&amp; ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00093   fxcalloc((<span class="keywordtype">void</span>**)&amp;ptr,<span class="keyword">sizeof</span>(TYPE)*n);
00094   }
00095 
00096 
00097 <span class="comment">// Allocate array of elements, initialized with bit-wise copy of src array</span>
00098 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00099 <span class="keyword">inline</span> <span class="keywordtype">void</span> dupElms(TYPE*&amp; ptr,<span class="keyword">const</span> TYPE* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00100   fxmemdup((<span class="keywordtype">void</span>**)&amp;ptr,src,<span class="keyword">sizeof</span>(TYPE)*n);
00101   }
00102 
00103 
00104 <span class="comment">// Resize array of elements, without constructor or destructor</span>
00105 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00106 <span class="keyword">inline</span> <span class="keywordtype">void</span> resizeElms(TYPE*&amp; ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){
00107   fxresize((<span class="keywordtype">void</span>**)&amp;ptr,<span class="keyword">sizeof</span>(TYPE)*n);
00108   }
00109 
00110 
00111 <span class="comment">// Free array of elements, without destruction</span>
00112 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt;
00113 <span class="keyword">inline</span> <span class="keywordtype">void</span> freeElms(TYPE*&amp; ptr){
00114   fxfree((<span class="keywordtype">void</span>**)&amp;ptr);
00115   }
00116 
00117 
00118 <span class="comment">/**********************  I m p l e m e n t a t i o n  ************************/</span>
00119 
00120 <span class="comment">// Specific implementations for built-in types</span>
00121 
00122 
00123 <span class="comment">// No-op constructors for array of basic type</span>
00124 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(FXuchar*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00125 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(FXchar*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00126 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(FXushort*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00127 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(FXshort*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00128 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(FXuint*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00129 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(FXint*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00130 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(FXfloat*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00131 <span class="keyword">inline</span> <span class="keywordtype">void</span> constructElms(FXdouble*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00132 
00133 <span class="comment">// No-op destructors for array of basic type</span>
00134 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(FXuchar*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00135 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(FXchar*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00136 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(FXushort*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00137 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(FXshort*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00138 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(FXuint*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00139 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(FXint*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00140 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(FXfloat*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00141 <span class="keyword">inline</span> <span class="keywordtype">void</span> destructElms(FXdouble*,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>){ }
00142 
00143 <span class="comment">// Simple bit-wise copy for array of basic type</span>
00144 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(FXuchar* dst,<span class="keyword">const</span> FXuchar* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n); }
00145 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(FXchar* dst,<span class="keyword">const</span> FXchar* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n); }
00146 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(FXushort* dst,<span class="keyword">const</span> FXushort* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n&lt;&lt;1); }
00147 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(FXshort* dst,<span class="keyword">const</span> FXshort* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n&lt;&lt;1); }
00148 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(FXuint* dst,<span class="keyword">const</span> FXuint* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n&lt;&lt;2); }
00149 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(FXint* dst,<span class="keyword">const</span> FXint* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n&lt;&lt;2); }
00150 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(FXfloat* dst,<span class="keyword">const</span> FXfloat* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n&lt;&lt;2); }
00151 <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(FXdouble* dst,<span class="keyword">const</span> FXdouble* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n&lt;&lt;3); }
00152 
00153 <span class="comment">// Simple bit-wise copy for array of pointers to any type</span>
00154 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> copyElms(TYPE** dst,<span class="keyword">const</span> TYPE** src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memcpy(dst,src,n*<span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)); }
00155 
00156 <span class="comment">// Simple bit-wise move for array of basic type</span>
00157 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(FXuchar* dst,<span class="keyword">const</span> FXuchar* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n); }
00158 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(FXchar* dst,<span class="keyword">const</span> FXchar* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n); }
00159 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(FXushort* dst,<span class="keyword">const</span> FXushort* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n&lt;&lt;1); }
00160 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(FXshort* dst,<span class="keyword">const</span> FXshort* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n&lt;&lt;1); }
00161 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(FXuint* dst,<span class="keyword">const</span> FXuint* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n&lt;&lt;2); }
00162 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(FXint* dst,<span class="keyword">const</span> FXint* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n&lt;&lt;2); }
00163 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(FXfloat* dst,<span class="keyword">const</span> FXfloat* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n&lt;&lt;2); }
00164 <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(FXdouble* dst,<span class="keyword">const</span> FXdouble* src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n&lt;&lt;3); }
00165 
00166 <span class="comment">// Simple bit-wise move for array of pointers to any type</span>
00167 <span class="keyword">template</span>&lt;<span class="keyword">class</span> TYPE&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> moveElms(TYPE** dst,<span class="keyword">const</span> TYPE** src,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ memmove(dst,src,n*<span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)); }
00168 
00169 <span class="comment">// Type-safe save for basic types</span>
00170 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> FXuchar* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.save(ptr,n); }
00171 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> FXchar* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.save(ptr,n); }
00172 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> FXushort* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.save(ptr,n); }
00173 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> FXshort* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.save(ptr,n); }
00174 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> FXuint* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.save(ptr,n); }
00175 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> FXint* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.save(ptr,n); }
00176 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> FXfloat* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.save(ptr,n); }
00177 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream&amp; store,<span class="keyword">const</span> FXdouble* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.save(ptr,n); }
00178 
00179 <span class="comment">// Type-safe load for basic types</span>
00180 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,FXuchar* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.load(ptr,n); }
00181 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,FXchar* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.load(ptr,n); }
00182 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,FXushort* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.load(ptr,n); }
00183 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,FXshort* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.load(ptr,n); }
00184 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,FXuint* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.load(ptr,n); }
00185 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,FXint* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.load(ptr,n); }
00186 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,FXfloat* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.load(ptr,n); }
00187 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream&amp; store,FXdouble* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ store.load(ptr,n); }
00188 
00189 }
00190 
00191 <span class="preprocessor">#endif</span>
</pre></div></font>

<!--- COPYRIGHT -->
<p>
<table width=100% cellpadding=0 cellspacing=0><tr><td width=100% valign=top id=HEADLINE align=right>
<img src='../art/line.gif' width=100% height=1><font size=-1>
Copyright &copy; 1997-2004 Jeroen van der Zijp</font>
</td></tr></table>
</p>
<!--- COPYRIGHT -->
</body>
</html>