nuclear@0: /* nuclear@0: --------------------------------------------------------------------------- nuclear@0: Open Asset Import Library (assimp) nuclear@0: --------------------------------------------------------------------------- nuclear@0: nuclear@0: Copyright (c) 2006-2018, assimp team nuclear@0: nuclear@0: nuclear@0: nuclear@0: All rights reserved. nuclear@0: nuclear@0: Redistribution and use of this software in source and binary forms, nuclear@0: with or without modification, are permitted provided that the following nuclear@0: conditions are met: nuclear@0: nuclear@0: * Redistributions of source code must retain the above nuclear@0: copyright notice, this list of conditions and the nuclear@0: following disclaimer. nuclear@0: nuclear@0: * Redistributions in binary form must reproduce the above nuclear@0: copyright notice, this list of conditions and the nuclear@0: following disclaimer in the documentation and/or other nuclear@0: materials provided with the distribution. nuclear@0: nuclear@0: * Neither the name of the assimp team, nor the names of its nuclear@0: contributors may be used to endorse or promote products nuclear@0: derived from this software without specific prior nuclear@0: written permission of the assimp team. nuclear@0: nuclear@0: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS nuclear@0: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT nuclear@0: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR nuclear@0: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT nuclear@0: OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, nuclear@0: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT nuclear@0: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, nuclear@0: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY nuclear@0: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT nuclear@0: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE nuclear@0: OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. nuclear@0: --------------------------------------------------------------------------- nuclear@0: */ nuclear@0: nuclear@0: /** @file color4.inl nuclear@0: * @brief Inline implementation of aiColor4t operators nuclear@0: */ nuclear@0: #pragma once nuclear@0: #ifndef AI_COLOR4D_INL_INC nuclear@0: #define AI_COLOR4D_INL_INC nuclear@0: nuclear@0: #ifdef __cplusplus nuclear@0: #include "color4.h" nuclear@0: nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE const aiColor4t& aiColor4t::operator += (const aiColor4t& o) { nuclear@0: r += o.r; g += o.g; b += o.b; a += o.a; nuclear@0: return *this; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE const aiColor4t& aiColor4t::operator -= (const aiColor4t& o) { nuclear@0: r -= o.r; g -= o.g; b -= o.b; a -= o.a; nuclear@0: return *this; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE const aiColor4t& aiColor4t::operator *= (TReal f) { nuclear@0: r *= f; g *= f; b *= f; a *= f; nuclear@0: return *this; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE const aiColor4t& aiColor4t::operator /= (TReal f) { nuclear@0: r /= f; g /= f; b /= f; a /= f; nuclear@0: return *this; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE TReal aiColor4t::operator[](unsigned int i) const { nuclear@0: switch ( i ) { nuclear@0: case 0: nuclear@0: return r; nuclear@0: case 1: nuclear@0: return g; nuclear@0: case 2: nuclear@0: return b; nuclear@0: default: nuclear@0: break; nuclear@0: } nuclear@0: return r; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE TReal& aiColor4t::operator[](unsigned int i) { nuclear@0: switch ( i ) { nuclear@0: case 0: nuclear@0: return r; nuclear@0: case 1: nuclear@0: return g; nuclear@0: case 2: nuclear@0: return b; nuclear@0: default: nuclear@0: break; nuclear@0: } nuclear@0: return r; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE bool aiColor4t::operator== (const aiColor4t& other) const { nuclear@0: return r == other.r && g == other.g && b == other.b && a == other.a; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE bool aiColor4t::operator!= (const aiColor4t& other) const { nuclear@0: return r != other.r || g != other.g || b != other.b || a != other.a; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE bool aiColor4t::operator< (const aiColor4t& other) const { nuclear@0: return r < other.r || ( nuclear@0: r == other.r && ( nuclear@0: g < other.g || ( nuclear@0: g == other.g && ( nuclear@0: b < other.b || ( nuclear@0: b == other.b && ( nuclear@0: a < other.a nuclear@0: ) nuclear@0: ) nuclear@0: ) nuclear@0: ) nuclear@0: ) nuclear@0: ); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator + (const aiColor4t& v1, const aiColor4t& v2) { nuclear@0: return aiColor4t( v1.r + v2.r, v1.g + v2.g, v1.b + v2.b, v1.a + v2.a); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator - (const aiColor4t& v1, const aiColor4t& v2) { nuclear@0: return aiColor4t( v1.r - v2.r, v1.g - v2.g, v1.b - v2.b, v1.a - v2.a); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator * (const aiColor4t& v1, const aiColor4t& v2) { nuclear@0: return aiColor4t( v1.r * v2.r, v1.g * v2.g, v1.b * v2.b, v1.a * v2.a); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator / (const aiColor4t& v1, const aiColor4t& v2) { nuclear@0: return aiColor4t( v1.r / v2.r, v1.g / v2.g, v1.b / v2.b, v1.a / v2.a); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator * ( TReal f, const aiColor4t& v) { nuclear@0: return aiColor4t( f*v.r, f*v.g, f*v.b, f*v.a); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator * ( const aiColor4t& v, TReal f) { nuclear@0: return aiColor4t( f*v.r, f*v.g, f*v.b, f*v.a); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator / ( const aiColor4t& v, TReal f) { nuclear@0: return v * (1/f); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator / ( TReal f,const aiColor4t& v) { nuclear@0: return aiColor4t(f,f,f,f)/v; nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator + ( const aiColor4t& v, TReal f) { nuclear@0: return aiColor4t( f+v.r, f+v.g, f+v.b, f+v.a); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator - ( const aiColor4t& v, TReal f) { nuclear@0: return aiColor4t( v.r-f, v.g-f, v.b-f, v.a-f); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator + ( TReal f, const aiColor4t& v) { nuclear@0: return aiColor4t( f+v.r, f+v.g, f+v.b, f+v.a); nuclear@0: } nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: AI_FORCE_INLINE aiColor4t operator - ( TReal f, const aiColor4t& v) { nuclear@0: return aiColor4t( f-v.r, f-v.g, f-v.b, f-v.a); nuclear@0: } nuclear@0: nuclear@0: // ------------------------------------------------------------------------------------------------ nuclear@0: template nuclear@0: inline bool aiColor4t :: IsBlack() const { nuclear@0: // The alpha component doesn't care here. black is black. nuclear@0: static const TReal epsilon = 10e-3f; nuclear@0: return std::fabs( r ) < epsilon && std::fabs( g ) < epsilon && std::fabs( b ) < epsilon; nuclear@0: } nuclear@0: nuclear@0: #endif // __cplusplus nuclear@0: #endif // AI_VECTOR3D_INL_INC