<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> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <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><<span class="keyword">class</span> TYPE> 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><<span class="keyword">class</span> TYPE> 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->~TYPE(); ptr++; } 00045 } 00046 00047 00048 <span class="comment">// Copy some elements from one place to another</span> 00049 <span class="keyword">template</span><<span class="keyword">class</span> TYPE> 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><<span class="keyword">class</span> TYPE> 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>dst){ 00059 <span class="keywordflow">while</span>(n--){ *dst++ = *src++; } 00060 } 00061 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(dst>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><<span class="keyword">class</span> TYPE> 00071 <span class="keyword">inline</span> <span class="keywordtype">void</span> saveElms(FXStream& 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 << *ptr; ptr++; } 00073 } 00074 00075 00076 <span class="comment">// Load some elements from persistent store</span> 00077 <span class="keyword">template</span><<span class="keyword">class</span> TYPE> 00078 <span class="keyword">inline</span> <span class="keywordtype">void</span> loadElms(FXStream& store,TYPE* ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ 00079 <span class="keywordflow">while</span>(n--){ store >> *ptr; ptr++; } 00080 } 00081 00082 00083 <span class="comment">// Allocate array of elements, uninitialized</span> 00084 <span class="keyword">template</span><<span class="keyword">class</span> TYPE> 00085 <span class="keyword">inline</span> <span class="keywordtype">void</span> allocElms(TYPE*& ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ 00086 fxmalloc((<span class="keywordtype">void</span>**)&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><<span class="keyword">class</span> TYPE> 00092 <span class="keyword">inline</span> <span class="keywordtype">void</span> callocElms(TYPE*& ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ 00093 fxcalloc((<span class="keywordtype">void</span>**)&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><<span class="keyword">class</span> TYPE> 00099 <span class="keyword">inline</span> <span class="keywordtype">void</span> dupElms(TYPE*& 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>**)&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><<span class="keyword">class</span> TYPE> 00106 <span class="keyword">inline</span> <span class="keywordtype">void</span> resizeElms(TYPE*& ptr,<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> n){ 00107 fxresize((<span class="keywordtype">void</span>**)&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><<span class="keyword">class</span> TYPE> 00113 <span class="keyword">inline</span> <span class="keywordtype">void</span> freeElms(TYPE*& ptr){ 00114 fxfree((<span class="keywordtype">void</span>**)&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<<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<<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<<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<<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<<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<<3); } 00152 00153 <span class="comment">// Simple bit-wise copy for array of pointers to any type</span> 00154 <span class="keyword">template</span><<span class="keyword">class</span> TYPE> <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<<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<<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<<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<<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<<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<<3); } 00165 00166 <span class="comment">// Simple bit-wise move for array of pointers to any type</span> 00167 <span class="keyword">template</span><<span class="keyword">class</span> TYPE> <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& 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& 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& 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& 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& 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& 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& 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& 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& 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& 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& 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& 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& 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& 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& 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& 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 © 1997-2004 Jeroen van der Zijp</font> </td></tr></table> </p> <!--- COPYRIGHT --> </body> </html>