![]() |
http://www.sim.no http://www.coin3d.org |
00001 /**************************************************************************\ 00002 * 00003 * This file is part of the Coin 3D visualization library. 00004 * Copyright (C) 1998-2007 by Systems in Motion. All rights reserved. 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License 00008 * ("GPL") version 2 as published by the Free Software Foundation. 00009 * See the file LICENSE.GPL at the root directory of this source 00010 * distribution for additional information about the GNU GPL. 00011 * 00012 * For using Coin with software that can not be combined with the GNU 00013 * GPL, and for taking advantage of the additional benefits of our 00014 * support services, please contact Systems in Motion about acquiring 00015 * a Coin Professional Edition License. 00016 * 00017 * See http://www.coin3d.org/ for more information. 00018 * 00019 * Systems in Motion, Postboks 1283, Pirsenteret, 7462 Trondheim, NORWAY. 00020 * http://www.sim.no/ sales@sim.no coin-support@coin3d.org 00021 * 00022 \**************************************************************************/ 00023 00024 #ifndef COIN_SBBASIC_H 00025 #define COIN_SBBASIC_H 00026 00027 /* *********************************************************************** */ 00028 00029 #include <Inventor/C/basic.h> 00030 00031 /* *********************************************************************** */ 00032 /* Trap people trying to use Inventor headers while compiling C source code. 00033 * (we get support mail about this from time to time) 00034 */ 00035 #ifndef __cplusplus 00036 #error You are not compiling C++ - maybe your source file is named <file>.c 00037 #endif 00038 00039 /* *********************************************************************** */ 00040 /* Include these for Open Inventor compatibility reasons (they are not 00041 * actually used in Coin.) 00042 */ 00043 #define SoEXTENDER 00044 #define SoINTERNAL 00045 00046 /* *********************************************************************** */ 00047 00048 /* Some useful inline template functions: 00049 * SbAbs(Val) - returns absolute value 00050 * SbMin(Val1, Val2) - returns minimum value 00051 * SbMax(Val1, Val2) - returns maximum value 00052 * SbClamp(Val, Min, Max) - returns clamped value 00053 * SbSwap(Val1, Val2) - swaps the two values (no return value) 00054 * SbSqr(val) - returns (val)² 00055 */ 00056 00057 template <class Type> 00058 inline Type SbAbs( Type Val ) { 00059 return (Val < 0) ? 0 - Val : Val; 00060 } 00061 00062 template <class Type> 00063 inline Type SbMax( const Type A, const Type B ) { 00064 return (A < B) ? B : A; 00065 } 00066 00067 template <class Type> 00068 inline Type SbMin( const Type A, const Type B ) { 00069 return (A < B) ? A : B; 00070 } 00071 00072 template <class Type> 00073 inline Type SbClamp( const Type Val, const Type Min, const Type Max ) { 00074 return (Val < Min) ? Min : (Val > Max) ? Max : Val; 00075 } 00076 00077 template <class Type> 00078 inline void SbSwap( Type & A, Type & B ) { 00079 Type T; T = A; A = B; B = T; 00080 } 00081 00082 template <class Type> 00083 inline Type SbSqr(const Type val) { 00084 return val * val; 00085 } 00086 00087 /* *********************************************************************** */ 00088 00089 /* COMPILER BUG WORKAROUND: 00090 00091 We've had reports that Sun CC v4.0 is (likely) buggy, and doesn't 00092 allow a statement like 00093 00094 SoType SoNode::classTypeId = SoType::badType(); 00095 00096 As a hack we can however get around this by instead writing it as 00097 00098 SoType SoNode::classTypeId; 00099 00100 ..as the SoType variable will then be initialized to bitpattern 00101 0x0000, which equals SoType::badType(). We can *however* not do 00102 this for the Intel C/C++ compiler, as that does *not* init to the 00103 0x0000 bitpattern (which may be a separate bug -- I haven't read 00104 the C++ spec closely enough to decide whether that relied on 00105 unspecified behavior or not). 00106 00107 The latest version of the Intel compiler has been tested to still 00108 have this problem, so I've decided to re-install the old code, but 00109 in this form: 00110 00111 SoType SoNode::classTypeId STATIC_SOTYPE_INIT; 00112 00113 ..so it is easy to revert if somebody complains that the code 00114 reversal breaks their old Sun CC 4.0 compiler -- see the #define of 00115 STATIC_SOTYPE_INIT below. 00116 00117 If that happens, we should work with the reporter, having access to 00118 the buggy compiler, to make a configure check which sets the 00119 SUN_CC_4_0_SOTYPE_INIT_BUG #define in include/Inventor/C/basic.h.in. 00120 00121 (Note that the Sun CC compiler has moved on, and a later version 00122 we've tested, 5.4, does not have the bug.) 00123 00124 20050105 mortene. 00125 */ 00126 00127 #define SUN_CC_4_0_SOTYPE_INIT_BUG 0 /* assume compiler is ok for now */ 00128 00129 #if SUN_CC_4_0_SOTYPE_INIT_BUG 00130 #define STATIC_SOTYPE_INIT 00131 #else 00132 #define STATIC_SOTYPE_INIT = SoType::badType() 00133 #endif 00134 00135 /* *********************************************************************** */ 00136 00137 #endif /* !COIN_SBBASIC_H */
Copyright © 1998-2005 by Systems in Motion AS. All rights reserved.
Generated on Wed Aug 15 07:37:37 2007 for Coin by Doxygen. 1.5.3