<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Crystal Space 1.2.1: csutil/csendian.h Source File (Crystal Space 1.2.1 Public API Reference)</title> <link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <table border="0" cellpadding="0" cellspacing="0" width="100%" class="head"> <tr height="59"> <td class="head" width="202" valign="bottom" style="padding-left:0;"><a href="http://www.crystalspace3d.org/"><img src="csblur.png" width="236" height="59" alt="CrystalSpace" border="0"></a></td> <td class="head"><h2>Public API Reference</h2></td> </tr> <tr height="11"> <td colspan="2" class="headshadow" valign="top" style="padding-left:0;"><img src="csblurb.png" width="236" height="11" alt="" border="0"></td> </tr> </table> <div class="content"> <!-- Generated by Doxygen 1.5.3 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="classes.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> </ul> </div> <h1>csutil/csendian.h</h1><a href="csendian_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> <a name="l00002"></a>00002 <span class="comment"> Copyright (C) 1998 by Jorrit Tyberghein</span> <a name="l00003"></a>00003 <span class="comment"></span> <a name="l00004"></a>00004 <span class="comment"> This library is free software; you can redistribute it and/or</span> <a name="l00005"></a>00005 <span class="comment"> modify it under the terms of the GNU Library General Public</span> <a name="l00006"></a>00006 <span class="comment"> License as published by the Free Software Foundation; either</span> <a name="l00007"></a>00007 <span class="comment"> version 2 of the License, or (at your option) any later version.</span> <a name="l00008"></a>00008 <span class="comment"></span> <a name="l00009"></a>00009 <span class="comment"> This library is distributed in the hope that it will be useful,</span> <a name="l00010"></a>00010 <span class="comment"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00011"></a>00011 <span class="comment"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> <a name="l00012"></a>00012 <span class="comment"> Library General Public License for more details.</span> <a name="l00013"></a>00013 <span class="comment"></span> <a name="l00014"></a>00014 <span class="comment"> You should have received a copy of the GNU Library General Public</span> <a name="l00015"></a>00015 <span class="comment"> License along with this library; if not, write to the Free</span> <a name="l00016"></a>00016 <span class="comment"> Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</span> <a name="l00017"></a>00017 <span class="comment">*/</span> <a name="l00018"></a>00018 <a name="l00019"></a>00019 <span class="preprocessor">#ifndef __CS_CSENDIAN_H__</span> <a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define __CS_CSENDIAN_H__</span> <a name="l00021"></a>00021 <span class="preprocessor"></span> <a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="math_8h.html" title="Generic mathematic utility functions.">math.h</a>></span> <a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="cstypes_8h.html" title="Commonly used types and macros.">cstypes.h</a>"</span> <a name="l00031"></a>00031 <span class="preprocessor">#if defined(CS_HAVE_BYTESWAP_H)</span> <a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <byteswap.h></span> <a name="l00033"></a>00033 <span class="preprocessor">#endif</span> <a name="l00034"></a>00034 <span class="preprocessor"></span> <a name="l00035"></a><a class="code" href="group__util.html#g20ad6ed7b2fc5754d8696f8d4eeebb90">00035</a> <span class="preprocessor">#define csQroundSure(x) (int ((x) + ((x < 0) ? -0.5 : +0.5)))</span> <a name="l00036"></a>00036 <span class="preprocessor"></span> <a name="l00040"></a><a class="code" href="structcsSwapBytes.html">00040</a> <span class="keyword">struct </span><a class="code" href="structcsSwapBytes.html" title="Methods to unconditionally swap the byte order of specifically sized types.">csSwapBytes</a> <a name="l00041"></a>00041 { <a name="l00042"></a>00042 <span class="keyword">public</span>: <a name="l00044"></a>00044 <a name="l00045"></a><a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be">00045</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> s) <a name="l00046"></a>00046 { <a name="l00047"></a>00047 <span class="preprocessor"> #if defined(CS_COMPILER_MSVC) && (_MSC_VER >= 1300)</span> <a name="l00048"></a>00048 <span class="preprocessor"></span> <span class="keywordflow">return</span> _byteswap_ushort (s); <a name="l00049"></a>00049 <span class="preprocessor"> #elif defined(CS_HAVE_BYTESWAP_H)</span> <a name="l00050"></a>00050 <span class="preprocessor"></span> <span class="keywordflow">return</span> bswap_16 (s); <a name="l00051"></a>00051 <span class="preprocessor"> #else</span> <a name="l00052"></a>00052 <span class="preprocessor"></span> <span class="keywordflow">return</span> (s >> 8) | (s << 8); <a name="l00053"></a>00053 <span class="preprocessor"> #endif</span> <a name="l00054"></a>00054 <span class="preprocessor"></span> } <a name="l00055"></a><a class="code" href="structcsSwapBytes.html#ef4bc5932a8447bc469795947f9ac45e">00055</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (<a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> s) <a name="l00056"></a>00056 { <span class="keywordflow">return</span> (<a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a>)<a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> ((<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a>)s); } <a name="l00057"></a><a class="code" href="structcsSwapBytes.html#a55ee2e5d2b725fabfcce4419885f0ea">00057</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> l) <a name="l00058"></a>00058 { <a name="l00059"></a>00059 <span class="preprocessor"> #if defined(CS_COMPILER_MSVC) && (_MSC_VER >= 1300)</span> <a name="l00060"></a>00060 <span class="preprocessor"></span> <span class="keywordflow">return</span> _byteswap_ulong (l); <a name="l00061"></a>00061 <span class="preprocessor"> #elif defined(CS_HAVE_BYTESWAP_H)</span> <a name="l00062"></a>00062 <span class="preprocessor"></span> <span class="keywordflow">return</span> bswap_32 (l); <a name="l00063"></a>00063 <span class="preprocessor"> #else</span> <a name="l00064"></a>00064 <span class="preprocessor"></span> <span class="keywordflow">return</span> (l >> 24) | ((l >> 8) & 0xff00) | ((l << 8) & 0xff0000) | (l << 24); <a name="l00065"></a>00065 <span class="preprocessor"> #endif</span> <a name="l00066"></a>00066 <span class="preprocessor"></span> } <a name="l00067"></a><a class="code" href="structcsSwapBytes.html#99a637159d3b6807e9e596f858279d17">00067</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> l) <a name="l00068"></a>00068 { <span class="keywordflow">return</span> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a>)<a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> ((<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a>)l); } <a name="l00069"></a><a class="code" href="structcsSwapBytes.html#05bba77db9204e7ea049ddc49c16fae3">00069</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> l) <a name="l00070"></a>00070 { <a name="l00071"></a>00071 <span class="preprocessor"> #if defined(CS_COMPILER_MSVC) && (_MSC_VER >= 1300)</span> <a name="l00072"></a>00072 <span class="preprocessor"></span> <span class="keywordflow">return</span> _byteswap_uint64 (l); <a name="l00073"></a>00073 <span class="preprocessor"> #elif defined(CS_HAVE_BYTESWAP_H) && !defined(__STRICT_ANSI__)</span> <a name="l00074"></a>00074 <span class="preprocessor"></span> <span class="keywordflow">return</span> bswap_64 (l); <a name="l00075"></a>00075 <span class="preprocessor"> #else</span> <a name="l00076"></a>00076 <span class="preprocessor"></span> <span class="keyword">union</span> <a name="l00077"></a>00077 { <a name="l00078"></a>00078 <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> ui64; <a name="l00079"></a>00079 <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> ui32[2]; <a name="l00080"></a>00080 } u1, u2; <a name="l00081"></a>00081 u1.ui64 = l; <a name="l00082"></a>00082 u2.ui32[0] = <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (u1.ui32[1]); <a name="l00083"></a>00083 u2.ui32[1] = <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (u1.ui32[0]); <a name="l00084"></a>00084 <span class="keywordflow">return</span> u2.ui64; <a name="l00085"></a>00085 <span class="preprocessor"> #endif</span> <a name="l00086"></a>00086 <span class="preprocessor"></span> } <a name="l00087"></a><a class="code" href="structcsSwapBytes.html#929e07595c810ccfe44bd358b5b551e8">00087</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> l) <a name="l00088"></a>00088 { <span class="keywordflow">return</span> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a>)<a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> ((<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a>)l); } <a name="l00089"></a>00089 <a name="l00090"></a><a class="code" href="structcsSwapBytes.html#3cac62ed529aa3f7d34ac52fe3b16846">00090</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> <a class="code" href="structcsSwapBytes.html#3cac62ed529aa3f7d34ac52fe3b16846">UInt16</a> (<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (x); } <a name="l00091"></a><a class="code" href="structcsSwapBytes.html#ece0f810fb22e2fdd9468ccaeed76053">00091</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> <a class="code" href="structcsSwapBytes.html#ece0f810fb22e2fdd9468ccaeed76053">Int16</a> (<a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (x); } <a name="l00092"></a><a class="code" href="structcsSwapBytes.html#a7438c05f6bcd9b8205f2ca1f16773e5">00092</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> <a class="code" href="structcsSwapBytes.html#a7438c05f6bcd9b8205f2ca1f16773e5">UInt32</a> (<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (x); } <a name="l00093"></a><a class="code" href="structcsSwapBytes.html#9b487f0d4a4cffa29b15ebc57b8b9200">00093</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> <a class="code" href="structcsSwapBytes.html#9b487f0d4a4cffa29b15ebc57b8b9200">Int32</a> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (x); } <a name="l00094"></a><a class="code" href="structcsSwapBytes.html#5eb35bd81c1a9dd7014a0c24e71fb3a6">00094</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> <a class="code" href="structcsSwapBytes.html#5eb35bd81c1a9dd7014a0c24e71fb3a6">UInt64</a> (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (x); } <a name="l00095"></a><a class="code" href="structcsSwapBytes.html#9e5a47f1009fb8f48a2c6885762cf472">00095</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <a class="code" href="structcsSwapBytes.html#9e5a47f1009fb8f48a2c6885762cf472">Int64</a> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">Swap</a> (x); } <a name="l00097"></a>00097 }; <a name="l00098"></a>00098 <a name="l00099"></a>00099 <span class="preprocessor">#ifdef CS_BIG_ENDIAN</span> <a name="l00100"></a>00100 <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="structcsBigEndian.html" title="Big endian to native conversion routines.">csBigEndian</a> <a name="l00101"></a>00101 #else <a name="l00107"></a><a class="code" href="structcsLittleEndian.html">00107</a> struct <a class="code" href="structcsLittleEndian.html" title="Little endian to native conversion routines.">csLittleEndian</a> <a name="l00108"></a>00108 #endif <a name="l00109"></a>00109 { <a name="l00111"></a>00111 <a name="l00112"></a><a class="code" href="structcsLittleEndian.html#7084fe5e31f02387645f805bafcc16f4">00112</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> x) { <span class="keywordflow">return</span> x; } <a name="l00113"></a><a class="code" href="structcsLittleEndian.html#cd30d68db556bf52495884babbe01f3c">00113</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> x) { <span class="keywordflow">return</span> x; } <a name="l00114"></a><a class="code" href="structcsLittleEndian.html#cbb33fdde6c68d21f14231cf11baf68b">00114</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> x) { <span class="keywordflow">return</span> x; } <a name="l00115"></a><a class="code" href="structcsLittleEndian.html#94451642538ab090d92a4ef4d693ddda">00115</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> x) { <span class="keywordflow">return</span> x; } <a name="l00116"></a><a class="code" href="structcsLittleEndian.html#4092a7821148efadbfff7b7d2dbc45c3">00116</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> x) { <span class="keywordflow">return</span> x; } <a name="l00117"></a><a class="code" href="structcsLittleEndian.html#059d0cd2a986112eafd577e3dc06db2a">00117</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> x) { <span class="keywordflow">return</span> x; } <a name="l00118"></a>00118 <a name="l00119"></a><a class="code" href="structcsLittleEndian.html#f520545c2d09ccdccc45410b801a8ad6">00119</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> <a class="code" href="structcsBigEndian.html#d9487c9434d18f390317bd505711ed0c">UInt16</a> (<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00120"></a><a class="code" href="structcsLittleEndian.html#18cdf1d565583c8f3c7e33002f136b3c">00120</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> <a class="code" href="structcsBigEndian.html#cd0043b2336f16ac2ede13aa1a1d08bc">Int16</a> (<a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00121"></a><a class="code" href="structcsLittleEndian.html#28230d0f40f815eb9200e8b50026e0d2">00121</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> <a class="code" href="structcsBigEndian.html#fc23854c7240eac3b726eecced934e8f">UInt32</a> (<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00122"></a><a class="code" href="structcsLittleEndian.html#adb68f8a0b08214ffcf0d40462c1da3d">00122</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> <a class="code" href="structcsBigEndian.html#4675550524e8be4c7270fe6936294517">Int32</a> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00123"></a><a class="code" href="structcsLittleEndian.html#1830fa7c52e45177c1ea300a19e939f2">00123</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> <a class="code" href="structcsBigEndian.html#96c93373e7584c18fb94a057c434900f">UInt64</a> (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00124"></a><a class="code" href="structcsLittleEndian.html#d4125a2804e85e55ec1c08809e7a3d87">00124</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <a class="code" href="structcsBigEndian.html#51e0474ffbe5f33a38ad970f5e9529e4">Int64</a> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00126"></a>00126 }; <a name="l00127"></a>00127 <a name="l00128"></a>00128 <span class="preprocessor">#ifdef CS_LITTLE_ENDIAN</span> <a name="l00129"></a>00129 <span class="preprocessor"></span> <a name="l00134"></a><a class="code" href="structcsBigEndian.html">00134</a> <span class="keyword">struct </span><a class="code" href="structcsBigEndian.html" title="Big endian to native conversion routines.">csBigEndian</a> <a name="l00135"></a>00135 #else <a name="l00136"></a>00136 struct <a class="code" href="structcsLittleEndian.html" title="Little endian to native conversion routines.">csLittleEndian</a> <a name="l00137"></a>00137 #endif <a name="l00138"></a>00138 { <a name="l00139"></a>00139 <span class="keyword">public</span>: <a name="l00141"></a>00141 <a name="l00142"></a><a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538">00142</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> s) <a name="l00143"></a>00143 { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">csSwapBytes::Swap</a> (s); } <a name="l00144"></a><a class="code" href="structcsBigEndian.html#41fc57233ffeece64c62fb4be7c1b934">00144</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> s) <a name="l00145"></a>00145 { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">csSwapBytes::Swap</a> (s); } <a name="l00146"></a><a class="code" href="structcsBigEndian.html#a6d57e13167f0c29c58b28d2d87cf80d">00146</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> l) <a name="l00147"></a>00147 { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">csSwapBytes::Swap</a> (l); } <a name="l00148"></a><a class="code" href="structcsBigEndian.html#b5ed04d68519cf6ea81365c17bbcc021">00148</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> l) <a name="l00149"></a>00149 { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">csSwapBytes::Swap</a> (l); } <a name="l00150"></a><a class="code" href="structcsBigEndian.html#a75f1f7a91f448afe262f033d42ed2b1">00150</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> l) <a name="l00151"></a>00151 { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">csSwapBytes::Swap</a> (l); } <a name="l00152"></a><a class="code" href="structcsBigEndian.html#992dfa74eca30fe3c94edf1aa2afb559">00152</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> l) <a name="l00153"></a>00153 { <span class="keywordflow">return</span> <a class="code" href="structcsSwapBytes.html#e9054cbad7085e9717ebf09e825bb2be" title="Swap byte order.">csSwapBytes::Swap</a> (l); } <a name="l00154"></a>00154 <a name="l00155"></a><a class="code" href="structcsBigEndian.html#d9487c9434d18f390317bd505711ed0c">00155</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> <a class="code" href="structcsBigEndian.html#d9487c9434d18f390317bd505711ed0c">UInt16</a> (<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00156"></a><a class="code" href="structcsBigEndian.html#cd0043b2336f16ac2ede13aa1a1d08bc">00156</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> <a class="code" href="structcsBigEndian.html#cd0043b2336f16ac2ede13aa1a1d08bc">Int16</a> (<a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00157"></a><a class="code" href="structcsBigEndian.html#fc23854c7240eac3b726eecced934e8f">00157</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> <a class="code" href="structcsBigEndian.html#fc23854c7240eac3b726eecced934e8f">UInt32</a> (<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00158"></a><a class="code" href="structcsBigEndian.html#4675550524e8be4c7270fe6936294517">00158</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> <a class="code" href="structcsBigEndian.html#4675550524e8be4c7270fe6936294517">Int32</a> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00159"></a><a class="code" href="structcsBigEndian.html#96c93373e7584c18fb94a057c434900f">00159</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> <a class="code" href="structcsBigEndian.html#96c93373e7584c18fb94a057c434900f">UInt64</a> (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00160"></a><a class="code" href="structcsBigEndian.html#51e0474ffbe5f33a38ad970f5e9529e4">00160</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <a class="code" href="structcsBigEndian.html#51e0474ffbe5f33a38ad970f5e9529e4">Int64</a> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> x) { <span class="keywordflow">return</span> <a class="code" href="structcsBigEndian.html#31f915351c5c0c9a2b4d97bf07740538" title="Convert specifically sized type from or to big endian.">Convert</a> (x); } <a name="l00162"></a>00162 }; <a name="l00163"></a>00163 <a name="l00167"></a><a class="code" href="structcsIEEEfloat.html">00167</a> <span class="keyword">struct </span><a class="code" href="structcsIEEEfloat.html" title="Convert IEEE 32-bit floats from or to native machine floats.">csIEEEfloat</a> <a name="l00168"></a>00168 { <a name="l00169"></a>00169 <span class="comment">/* \todo It would be even better if we also check for sizeof (float)</span> <a name="l00170"></a>00170 <span class="comment"> * in configure or so. */</span> <a name="l00171"></a>00171 <span class="preprocessor">#ifdef CS_IEEE_DOUBLE_FORMAT</span> <a name="l00172"></a>00172 <span class="preprocessor"></span> <a name="l00173"></a>00173 <a name="l00174"></a><a class="code" href="structcsIEEEfloat.html#e615e309e067f654da6a4120dd7ba63e">00174</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> <a class="code" href="structcsIEEEfloat.html#e615e309e067f654da6a4120dd7ba63e" title="Convert native to IEEE.">FromNative</a> (<span class="keywordtype">float</span> f) <a name="l00175"></a>00175 { <a name="l00176"></a>00176 <span class="keyword">union</span> <a name="l00177"></a>00177 { <a name="l00178"></a>00178 <span class="keywordtype">float</span> f; <a name="l00179"></a>00179 <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> ui32; <a name="l00180"></a>00180 } u; <a name="l00181"></a>00181 u.f = f; <a name="l00182"></a>00182 <span class="keywordflow">return</span> u.ui32; <a name="l00183"></a>00183 } <a name="l00184"></a><a class="code" href="structcsIEEEfloat.html#f8f06fc25af4eaf1ce3f2a2136173ebe">00184</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> <a class="code" href="structcsIEEEfloat.html#e615e309e067f654da6a4120dd7ba63e" title="Convert native to IEEE.">FromNative</a> (<span class="keywordtype">double</span> f) <a name="l00185"></a>00185 { <a name="l00186"></a>00186 <span class="keyword">union</span> <a name="l00187"></a>00187 { <a name="l00188"></a>00188 <span class="keywordtype">double</span> f; <a name="l00189"></a>00189 <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> ui64; <a name="l00190"></a>00190 } u; <a name="l00191"></a>00191 u.f = f; <a name="l00192"></a>00192 <span class="keywordflow">return</span> u.ui64; <a name="l00193"></a>00193 } <a name="l00195"></a>00195 <a name="l00197"></a>00197 <a name="l00198"></a><a class="code" href="structcsIEEEfloat.html#15918104acd45923850fa88c4363d8a4">00198</a> <span class="keyword">static</span> CS_FORCEINLINE <span class="keywordtype">float</span> <a class="code" href="structcsIEEEfloat.html#15918104acd45923850fa88c4363d8a4" title="Convert IEEE to native.">ToNative</a> (<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> f) <a name="l00199"></a>00199 { <a name="l00200"></a>00200 <span class="keyword">union</span> <a name="l00201"></a>00201 { <a name="l00202"></a>00202 <span class="keywordtype">float</span> f; <a name="l00203"></a>00203 <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> ui32; <a name="l00204"></a>00204 } u; <a name="l00205"></a>00205 u.ui32 = f; <a name="l00206"></a>00206 <span class="keywordflow">return</span> u.f; <a name="l00207"></a>00207 } <a name="l00208"></a><a class="code" href="structcsIEEEfloat.html#d23e80078bd2e11028c776fc4c79d415">00208</a> <span class="keyword">static</span> CS_FORCEINLINE <span class="keywordtype">double</span> <a class="code" href="structcsIEEEfloat.html#15918104acd45923850fa88c4363d8a4" title="Convert IEEE to native.">ToNative</a> (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> f) <a name="l00209"></a>00209 { <a name="l00210"></a>00210 <span class="keyword">union</span> <a name="l00211"></a>00211 { <a name="l00212"></a>00212 <span class="keywordtype">double</span> f; <a name="l00213"></a>00213 <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> ui64; <a name="l00214"></a>00214 } u; <a name="l00215"></a>00215 u.ui64 = f; <a name="l00216"></a>00216 <span class="keywordflow">return</span> u.f; <a name="l00217"></a>00217 } <a name="l00219"></a>00219 <span class="preprocessor">#else</span> <a name="l00220"></a>00220 <span class="preprocessor"></span><span class="preprocessor"> #error Do not know how to convert to IEEE floats</span> <a name="l00221"></a>00221 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00222"></a>00222 <span class="preprocessor"></span>}; <a name="l00223"></a>00223 <a name="l00232"></a><a class="code" href="structcsGetFromAddress.html">00232</a> <span class="keyword">struct </span><a class="code" href="structcsGetFromAddress.html" title="Sized data type access helpers.">csGetFromAddress</a> <a name="l00233"></a>00233 { <a name="l00235"></a>00235 <a name="l00236"></a><a class="code" href="structcsGetFromAddress.html#7e7fa9e395de01fbc42135e3d29dd73b">00236</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> <a class="code" href="structcsGetFromAddress.html#7e7fa9e395de01fbc42135e3d29dd73b" title="Get specifically sized type from unaligned memory address.">UInt16</a> (<span class="keyword">const</span> <span class="keywordtype">void</span> *buff) <a name="l00237"></a>00237 { <a name="l00238"></a>00238 <span class="preprocessor"> #ifdef CS_STRICT_ALIGNMENT</span> <a name="l00239"></a>00239 <span class="preprocessor"></span> <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> s; memcpy (&s, buff, <span class="keyword">sizeof</span> (s)); <a name="l00240"></a>00240 <span class="keywordflow">return</span> s; <a name="l00241"></a>00241 <span class="preprocessor"> #else</span> <a name="l00242"></a>00242 <span class="preprocessor"></span> <span class="keywordflow">return</span> *(<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> *)buff; <a name="l00243"></a>00243 <span class="preprocessor"> #endif</span> <a name="l00244"></a>00244 <span class="preprocessor"></span> } <a name="l00245"></a><a class="code" href="structcsGetFromAddress.html#3913ef9207884a60887239e73daff350">00245</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> <a class="code" href="structcsGetFromAddress.html#3913ef9207884a60887239e73daff350">Int16</a> (<span class="keyword">const</span> <span class="keywordtype">void</span> *buff) <a name="l00246"></a>00246 { <span class="keywordflow">return</span> (<a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a>)<a class="code" href="structcsGetFromAddress.html#7e7fa9e395de01fbc42135e3d29dd73b" title="Get specifically sized type from unaligned memory address.">UInt16</a> (buff); } <a name="l00247"></a><a class="code" href="structcsGetFromAddress.html#353df23df049930d02e8f47240457dc4">00247</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> <a class="code" href="structcsGetFromAddress.html#353df23df049930d02e8f47240457dc4">UInt32</a> (<span class="keyword">const</span> <span class="keywordtype">void</span> *buff) <a name="l00248"></a>00248 { <a name="l00249"></a>00249 <span class="preprocessor"> #ifdef CS_STRICT_ALIGNMENT</span> <a name="l00250"></a>00250 <span class="preprocessor"></span> <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> s; memcpy (&s, buff, <span class="keyword">sizeof</span> (s)); <a name="l00251"></a>00251 <span class="keywordflow">return</span> s; <a name="l00252"></a>00252 <span class="preprocessor"> #else</span> <a name="l00253"></a>00253 <span class="preprocessor"></span> <span class="keywordflow">return</span> *(<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> *)buff; <a name="l00254"></a>00254 <span class="preprocessor"> #endif</span> <a name="l00255"></a>00255 <span class="preprocessor"></span> } <a name="l00256"></a><a class="code" href="structcsGetFromAddress.html#c289fe064f86b1bdfad6c27d424ddbbf">00256</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> <a class="code" href="structcsGetFromAddress.html#c289fe064f86b1bdfad6c27d424ddbbf">Int32</a> (<span class="keyword">const</span> <span class="keywordtype">void</span> *buff) <a name="l00257"></a>00257 { <span class="keywordflow">return</span> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a>)<a class="code" href="structcsGetFromAddress.html#353df23df049930d02e8f47240457dc4">UInt32</a> (buff); } <a name="l00258"></a><a class="code" href="structcsGetFromAddress.html#824479434debb9435e7f03c241fcf1bf">00258</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> <a class="code" href="structcsGetFromAddress.html#824479434debb9435e7f03c241fcf1bf">UInt64</a> (<span class="keyword">const</span> <span class="keywordtype">void</span> *buff) <a name="l00259"></a>00259 { <a name="l00260"></a>00260 <span class="preprocessor"> #ifdef CS_STRICT_ALIGNMENT</span> <a name="l00261"></a>00261 <span class="preprocessor"></span> <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> s; memcpy (&s, buff, <span class="keyword">sizeof</span> (s)); <a name="l00262"></a>00262 <span class="keywordflow">return</span> s; <a name="l00263"></a>00263 <span class="preprocessor"> #else</span> <a name="l00264"></a>00264 <span class="preprocessor"></span> <span class="keywordflow">return</span> *(<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> *)buff; <a name="l00265"></a>00265 <span class="preprocessor"> #endif</span> <a name="l00266"></a>00266 <span class="preprocessor"></span> } <a name="l00267"></a><a class="code" href="structcsGetFromAddress.html#037280e564ae8c65b662a200d42e39eb">00267</a> <span class="keyword">static</span> CS_FORCEINLINE <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <a class="code" href="structcsGetFromAddress.html#037280e564ae8c65b662a200d42e39eb">Int64</a> (<span class="keyword">const</span> <span class="keywordtype">void</span> *buff) <a name="l00268"></a>00268 { <span class="keywordflow">return</span> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a>)<a class="code" href="structcsGetFromAddress.html#824479434debb9435e7f03c241fcf1bf">UInt64</a> (buff); } <a name="l00270"></a>00270 }; <a name="l00271"></a>00271 <a name="l00280"></a><a class="code" href="structcsSetToAddress.html">00280</a> <span class="keyword">struct </span><a class="code" href="structcsSetToAddress.html" title="Sized data type access helpers.">csSetToAddress</a> <a name="l00281"></a>00281 { <a name="l00283"></a>00283 <a name="l00284"></a><a class="code" href="structcsSetToAddress.html#62a9b7cdafbc13e66030e7e3acc89228">00284</a> <span class="keyword">static</span> CS_FORCEINLINE <span class="keywordtype">void</span> <a class="code" href="structcsSetToAddress.html#62a9b7cdafbc13e66030e7e3acc89228" title="Set specifically sized type at unaligned memory address.">UInt16</a> (<span class="keywordtype">void</span> *buff, <a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> s) <a name="l00285"></a>00285 { <a name="l00286"></a>00286 <span class="preprocessor"> #ifdef CS_STRICT_ALIGNMENT</span> <a name="l00287"></a>00287 <span class="preprocessor"></span> memcpy (buff, &s, <span class="keyword">sizeof</span> (s)); <a name="l00288"></a>00288 <span class="preprocessor"> #else</span> <a name="l00289"></a>00289 <span class="preprocessor"></span> *((<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a> *)buff) = s; <a name="l00290"></a>00290 <span class="preprocessor"> #endif</span> <a name="l00291"></a>00291 <span class="preprocessor"></span> } <a name="l00292"></a><a class="code" href="structcsSetToAddress.html#a54a63d685a030db0bdadc0f22b4eb79">00292</a> <span class="keyword">static</span> CS_FORCEINLINE <span class="keywordtype">void</span> <a class="code" href="structcsSetToAddress.html#a54a63d685a030db0bdadc0f22b4eb79">Int16</a> (<span class="keywordtype">void</span> *buff, <a class="code" href="group__util.html#g4355d16fcf9f644c9ac84293f0b1801f" title="signed 16-bit integer (-32 768..32 767)">int16</a> s) <a name="l00293"></a>00293 { <a class="code" href="structcsSetToAddress.html#62a9b7cdafbc13e66030e7e3acc89228" title="Set specifically sized type at unaligned memory address.">UInt16</a> (buff, (<a class="code" href="group__util.html#g05f6b0ae8f6a6e135b0e290c25fe0e4e" title="unsigned 16-bit integer (0..65 535)">uint16</a>)s); } <a name="l00294"></a><a class="code" href="structcsSetToAddress.html#8929e8dda17acbe00bc5abd911a50826">00294</a> <span class="keyword">static</span> CS_FORCEINLINE <span class="keywordtype">void</span> <a class="code" href="structcsSetToAddress.html#8929e8dda17acbe00bc5abd911a50826">UInt32</a> (<span class="keywordtype">void</span> *buff, <a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> s) <a name="l00295"></a>00295 { <a name="l00296"></a>00296 <span class="preprocessor"> #ifdef CS_STRICT_ALIGNMENT</span> <a name="l00297"></a>00297 <span class="preprocessor"></span> memcpy (buff, &s, <span class="keyword">sizeof</span> (s)); <a name="l00298"></a>00298 <span class="preprocessor"> #else</span> <a name="l00299"></a>00299 <span class="preprocessor"></span> *((<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a> *)buff) = s; <a name="l00300"></a>00300 <span class="preprocessor"> #endif</span> <a name="l00301"></a>00301 <span class="preprocessor"></span> } <a name="l00302"></a><a class="code" href="structcsSetToAddress.html#126da6c6242dbdd77fb94d9b475e8de9">00302</a> <span class="keyword">static</span> CS_FORCEINLINE <span class="keywordtype">void</span> <a class="code" href="structcsSetToAddress.html#126da6c6242dbdd77fb94d9b475e8de9">Int32</a> (<span class="keywordtype">void</span> *buff, <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> s) <a name="l00303"></a>00303 { <a class="code" href="structcsSetToAddress.html#8929e8dda17acbe00bc5abd911a50826">UInt32</a> (buff, (<a class="code" href="group__util.html#g1134b580f8da4de94ca6b1de4d37975e" title="unsigned 32-bit integer (0..4 294 967 295)">uint32</a>)s); } <a name="l00304"></a><a class="code" href="structcsSetToAddress.html#9f5bcd5cd15f98aa007f3b88902e180f">00304</a> <span class="keyword">static</span> CS_FORCEINLINE <span class="keywordtype">void</span> <a class="code" href="structcsSetToAddress.html#9f5bcd5cd15f98aa007f3b88902e180f">UInt64</a> (<span class="keywordtype">void</span> *buff, <a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> s) <a name="l00305"></a>00305 { <a name="l00306"></a>00306 <span class="preprocessor"> #ifdef CS_STRICT_ALIGNMENT</span> <a name="l00307"></a>00307 <span class="preprocessor"></span> memcpy (buff, &s, <span class="keyword">sizeof</span> (s)); <a name="l00308"></a>00308 <span class="preprocessor"> #else</span> <a name="l00309"></a>00309 <span class="preprocessor"></span> *((<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a> *)buff) = s; <a name="l00310"></a>00310 <span class="preprocessor"> #endif</span> <a name="l00311"></a>00311 <span class="preprocessor"></span> } <a name="l00312"></a><a class="code" href="structcsSetToAddress.html#40112b0d4fdbb89c494c62402478f763">00312</a> <span class="keyword">static</span> CS_FORCEINLINE <span class="keywordtype">void</span> <a class="code" href="structcsSetToAddress.html#40112b0d4fdbb89c494c62402478f763">Int64</a> (<span class="keywordtype">void</span> *buff, <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> s) <a name="l00313"></a>00313 { <a class="code" href="structcsSetToAddress.html#9f5bcd5cd15f98aa007f3b88902e180f">UInt64</a> (buff, (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a>)s); } <a name="l00315"></a>00315 }; <a name="l00316"></a>00316 <a name="l00317"></a>00317 <a name="l00318"></a>00318 <span class="comment">/*</span> <a name="l00319"></a>00319 <span class="comment"> To be able to painlessly transfer files betwen platforms, we should</span> <a name="l00320"></a>00320 <span class="comment"> avoid using native floating-point format. Here are a couple of routines</span> <a name="l00321"></a>00321 <span class="comment"> that are guaranteed to work on all platforms.</span> <a name="l00322"></a>00322 <span class="comment"></span> <a name="l00323"></a>00323 <span class="comment"> The floating point is converted to a fixed 1.7.25 bits format</span> <a name="l00324"></a>00324 <span class="comment"> (one bit sign, 7 bits exponent, 25 bits mantissa) and back,</span> <a name="l00325"></a>00325 <span class="comment"> so that we can binary store floating-point number without</span> <a name="l00326"></a>00326 <span class="comment"> cross-platform problems. If you wonder why 1+7+25 = 33 while we</span> <a name="l00327"></a>00327 <span class="comment"> only have 32 bits, we'll ommit the most significant bit of mantissa</span> <a name="l00328"></a>00328 <span class="comment"> since it is always 1 (we use normalized numbers). This increases the</span> <a name="l00329"></a>00329 <span class="comment"> precision twice.</span> <a name="l00330"></a>00330 <span class="comment"></span> <a name="l00331"></a>00331 <span class="comment"> For double, we use one bit sign, 15 bits exponent, 49 bits mantissa.</span> <a name="l00332"></a>00332 <span class="comment">*/</span> <a name="l00333"></a>00333 <a name="l00338"></a><a class="code" href="group__util.html#g96baed464a5b3a7116ce97fcd2526966">00338</a> <span class="comment">/*CS_DEPRECATED_METHOD*/</span> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> <a class="code" href="group__util.html#g96baed464a5b3a7116ce97fcd2526966" title="Convert a float to a cross-platform 32-bit format (no endianess adjustments!).">csFloatToLong</a> (<span class="keywordtype">float</span> f) <a name="l00339"></a>00339 { <a name="l00340"></a>00340 <span class="keywordtype">int</span> exp; <a name="l00341"></a>00341 <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> mant = <a class="code" href="group__util.html#g20ad6ed7b2fc5754d8696f8d4eeebb90">csQroundSure</a> (frexp (f, &exp) * 0x1000000); <a name="l00342"></a>00342 <a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> sign = mant & 0x80000000; <a name="l00343"></a>00343 <span class="keywordflow">if</span> (mant < 0) mant = -mant; <a name="l00344"></a>00344 <span class="keywordflow">if</span> (exp > 63) exp = 63; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (exp < -64) exp = -64; <a name="l00345"></a>00345 <span class="keywordflow">return</span> sign | ((exp & 0x7f) << 24) | (mant & 0xffffff); <a name="l00346"></a>00346 } <a name="l00347"></a>00347 <a name="l00352"></a><a class="code" href="group__util.html#g4f3643cfc0df0821156b600627a13375">00352</a> <span class="comment">/*CS_DEPRECATED_METHOD*/</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> <a class="code" href="group__util.html#g4f3643cfc0df0821156b600627a13375" title="Convert a 32-bit cross-platform float to native format (no endianess adjustments!)...">csLongToFloat</a> (<a class="code" href="group__util.html#g56f1a81c92849566ae864511088eb7e8" title="signed 32-bit integer (-2 147 483 648..2 147 483 647)">int32</a> l) <a name="l00353"></a>00353 { <a name="l00354"></a>00354 <span class="keywordtype">int</span> exp = (l >> 24) & 0x7f; <a name="l00355"></a>00355 <span class="keywordflow">if</span> (exp & 0x40) exp = exp | ~0x7f; <a name="l00356"></a>00356 <span class="keywordtype">float</span> mant = float (l & 0x00ffffff) / 0x1000000; <a name="l00357"></a>00357 <span class="keywordflow">if</span> (l & 0x80000000) mant = -mant; <a name="l00358"></a>00358 <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) ldexp (mant, exp); <a name="l00359"></a>00359 } <a name="l00360"></a>00360 <a name="l00361"></a>00361 <span class="comment">/* Implementation note: csDoubleToLongLong() and csLongLongToDouble()</span> <a name="l00362"></a>00362 <span class="comment"> *</span> <a name="l00363"></a>00363 <span class="comment"> * We avoid use of CONST_INT64() because 64-bit constants are illegal with g++</span> <a name="l00364"></a>00364 <span class="comment"> * under -ansi -pedantic, and we want this header to be useful to external</span> <a name="l00365"></a>00365 <span class="comment"> * projects which use -ansi -pedantic. Instead, we use bit shifts, such as (1</span> <a name="l00366"></a>00366 <span class="comment"> * << 59), and construct `mask' manually.</span> <a name="l00367"></a>00367 <span class="comment"> */</span> <a name="l00368"></a>00368 <a name="l00373"></a><a class="code" href="group__util.html#gc75c4514d8024792608a175e77e66470">00373</a> <span class="comment">/*CS_DEPRECATED_METHOD*/</span> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <a class="code" href="group__util.html#gc75c4514d8024792608a175e77e66470" title="Convert a double to a cross-platform 64-bit format (no endianess adjustments!).">csDoubleToLongLong</a> (<span class="keywordtype">double</span> d) <a name="l00374"></a>00374 { <a name="l00375"></a>00375 <span class="keywordtype">int</span> exp; <a name="l00376"></a>00376 <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> mant = (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a>) (frexp (d, &exp) * ((<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a>)1 << 48)); <a name="l00377"></a>00377 <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> sign = mant & ((<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a>)1 << 59); <a name="l00378"></a>00378 <span class="keywordflow">if</span> (mant < 0) mant = -mant; <a name="l00379"></a>00379 <span class="keywordflow">if</span> (exp > 32767) exp = 32767; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (exp < -32768) exp = -32768; <a name="l00380"></a>00380 <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <span class="keyword">const</span> mask = ((<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a>)0xffff << 32) | (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a>)0xffffffff; <a name="l00381"></a>00381 <span class="keywordflow">return</span> sign | ((<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> (exp) & 0x7fff) << 48) | (mant & mask); <a name="l00382"></a>00382 } <a name="l00383"></a>00383 <a name="l00388"></a><a class="code" href="group__util.html#g58ef9816cc9b61576b38954372f3e02a">00388</a> <span class="comment">/*CS_DEPRECATED_METHOD*/</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__util.html#g58ef9816cc9b61576b38954372f3e02a" title="Convert a 64-bit cross-platform double to native format (no endianess adjustments!)...">csLongLongToDouble</a> (<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> i) <a name="l00389"></a>00389 { <a name="l00390"></a>00390 <span class="keywordtype">int</span> exp = (i >> 48) & 0x7fff; <a name="l00391"></a>00391 <span class="keywordflow">if</span> (exp & 0x4000) exp = exp | ~0x7fff; <a name="l00392"></a>00392 <a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a> <span class="keyword">const</span> mask = ((<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a>)0xffff << 32) | (<a class="code" href="group__util.html#g058a7c8f752204f23318dc1dcab45b1c" title="unsigned 64-bit integer">uint64</a>)0xffffffff; <a name="l00393"></a>00393 <span class="keywordtype">double</span> mant = double (i & mask) / ((<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a>)1 << 48); <a name="l00394"></a>00394 <span class="keywordflow">if</span> (i & ((<a class="code" href="group__util.html#gecfc3c54bd29ad5964e1c1c3ccbf89df" title="signed 64-bit integer">int64</a>)1 << 59)) mant = -mant; <a name="l00395"></a>00395 <span class="keywordflow">return</span> ldexp (mant, exp); <a name="l00396"></a>00396 } <a name="l00397"></a>00397 <a name="l00398"></a>00398 <span class="comment">/* *\name Floating point conversions</span> <a name="l00399"></a>00399 <span class="comment"> * These routines are used for converting floating-point numbers</span> <a name="l00400"></a>00400 <span class="comment"> * into 16-bit shorts and back. This is useful for low-precision data.</span> <a name="l00401"></a>00401 <span class="comment"> * They use the 1.4.12 format. The range of numbers that can be represented</span> <a name="l00402"></a>00402 <span class="comment"> * in this format is from 2^-8 to 2^7. The precision for numbers near to</span> <a name="l00403"></a>00403 <span class="comment"> * 2^-8 (0.00390625) is near 0.000001, for numbers near 2^7 (128) is near 0.03.</span> <a name="l00404"></a>00404 <span class="comment"> * @{ */</span> <a name="l00405"></a>00405 <a name="l00410"></a><a class="code" href="group__util.html#g3a5f5b5a5c1588012069c8f7c4bef51e">00410</a> <span class="comment">/*CS_DEPRECATED_METHOD*/</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">short</span> <a class="code" href="group__util.html#g3a5f5b5a5c1588012069c8f7c4bef51e" title="Convert a float to a cross-platform 16-bit format (no endianess adjustments!).">csFloatToShort</a> (<span class="keywordtype">float</span> f) <a name="l00411"></a>00411 { <a name="l00412"></a>00412 <span class="keywordtype">int</span> exp; <a name="l00413"></a>00413 <span class="keywordtype">long</span> mant = <a class="code" href="group__util.html#g20ad6ed7b2fc5754d8696f8d4eeebb90">csQroundSure</a> (frexp (f, &exp) * 0x1000); <a name="l00414"></a>00414 <span class="keywordtype">long</span> sign = mant & 0x8000; <a name="l00415"></a>00415 <span class="keywordflow">if</span> (mant < 0) mant = -mant; <a name="l00416"></a>00416 <span class="keywordflow">if</span> (exp > 7) mant = 0x7ff, exp = 7; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (exp < -8) mant = 0, exp = -8; <a name="l00417"></a>00417 <span class="keywordflow">return</span> short(sign | ((exp & 0xf) << 11) | (mant & 0x7ff)); <a name="l00418"></a>00418 } <a name="l00419"></a>00419 <a name="l00424"></a><a class="code" href="group__util.html#gb87f1a6ea54f6388e88a83ece13b7902">00424</a> <span class="comment">/*CS_DEPRECATED_METHOD*/</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> <a class="code" href="group__util.html#gb87f1a6ea54f6388e88a83ece13b7902" title="Convert a 16-bit cross-platform float to native format (no endianess adjustments!)...">csShortToFloat</a> (<span class="keywordtype">short</span> s) <a name="l00425"></a>00425 { <a name="l00426"></a>00426 <span class="keywordtype">int</span> exp = (s >> 11) & 0xf; <a name="l00427"></a>00427 <span class="keywordflow">if</span> (exp & 0x8) exp = exp | ~0xf; <a name="l00428"></a>00428 <span class="keywordtype">float</span> mant = float ((s & 0x07ff) | 0x0800) / 0x1000; <a name="l00429"></a>00429 <span class="keywordflow">if</span> (s & 0x8000) mant = -mant; <a name="l00430"></a>00430 <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) ldexp (mant, exp); <a name="l00431"></a>00431 } <a name="l00432"></a>00432 <a name="l00440"></a>00440 <span class="preprocessor">#endif // __CS_CSENDIAN_H__</span> </pre></div><hr size="1"><address><small>Generated for Crystal Space 1.2.1 by <a href="http://www.doxygen.org/index.html">doxygen</a> 1.5.3 </small></address> </div></body> </html>