/** * @file lldefs.h * @brief Various generic constant definitions. * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ #ifndef LL_LLDEFS_H #define LL_LLDEFS_H #include "stdtypes.h" #include // Often used array indices const U32 VX = 0; const U32 VY = 1; const U32 VZ = 2; const U32 VW = 3; const U32 VS = 3; const U32 VRED = 0; const U32 VGREEN = 1; const U32 VBLUE = 2; const U32 VALPHA = 3; const U32 INVALID_DIRECTION = 0xFFFFFFFF; const U32 EAST = 0; const U32 NORTH = 1; const U32 WEST = 2; const U32 SOUTH = 3; const U32 NORTHEAST = 4; const U32 NORTHWEST = 5; const U32 SOUTHWEST = 6; const U32 SOUTHEAST = 7; const U32 MIDDLE = 8; const U8 EAST_MASK = 0x1< X // |/| | -4- |/| | // | +----|---------|---+ // | / / | / // | / -6- | / // |/ / |/ // +------------------+ const U32 NO_SIDE = 0; const U32 FRONT_SIDE = 1; const U32 BACK_SIDE = 2; const U32 LEFT_SIDE = 3; const U32 RIGHT_SIDE = 4; const U32 TOP_SIDE = 5; const U32 BOTTOM_SIDE = 6; const U8 LL_SOUND_FLAG_NONE = 0x0; const U8 LL_SOUND_FLAG_LOOP = 1<<0; const U8 LL_SOUND_FLAG_SYNC_MASTER = 1<<1; const U8 LL_SOUND_FLAG_SYNC_SLAVE = 1<<2; const U8 LL_SOUND_FLAG_SYNC_PENDING = 1<<3; const U8 LL_SOUND_FLAG_QUEUE = 1<<4; const U8 LL_SOUND_FLAG_STOP = 1<<5; const U8 LL_SOUND_FLAG_SYNC_MASK = LL_SOUND_FLAG_SYNC_MASTER | LL_SOUND_FLAG_SYNC_SLAVE | LL_SOUND_FLAG_SYNC_PENDING; // // *NOTE: These values may be used as hard-coded numbers in scanf() variants. // // -------------- // DO NOT CHANGE. // -------------- // const U32 LL_MAX_PATH = 1024; // buffer size of maximum path + filename string length // For strings we send in messages const U32 STD_STRING_BUF_SIZE = 255; // Buffer size const U32 STD_STRING_STR_LEN = 254; // Length of the string (not including \0) // *NOTE: This value is used as hard-coded numbers in scanf() variants. // DO NOT CHANGE. const U32 MAX_STRING = STD_STRING_BUF_SIZE; // Buffer size const U32 MAXADDRSTR = 17; // 123.567.901.345 = 15 chars + \0 + 1 for good luck // C++ is our friend. . . use template functions to make life easier! // specific inlines for basic types // // defined for all: // llmin(a,b) // llmax(a,b) // llclamp(a,minimum,maximum) // // defined for F32, F64: // llclampf(a) // clamps a to [0.0 .. 1.0] // // defined for U16, U32, U64, S16, S32, S64, : // llclampb(a) // clamps a to [0 .. 255] // template inline auto llmax(T1 d1, T2 d2) { return (d1 > d2) ? d1 : d2; } template inline auto llmax(T1 d1, T2 d2, T3 d3) { auto r = llmax(d1,d2); return llmax(r, d3); } template inline auto llmax(T1 d1, T2 d2, T3 d3, T4 d4) { auto r1 = llmax(d1,d2); auto r2 = llmax(d3,d4); return llmax(r1, r2); } template inline auto llmin(T1 d1, T2 d2) { return (d1 < d2) ? d1 : d2; } template inline auto llmin(T1 d1, T2 d2, T3 d3) { auto r = llmin(d1,d2); return (r < d3 ? r : d3); } template inline auto llmin(T1 d1, T2 d2, T3 d3, T4 d4) { auto r1 = llmin(d1,d2); auto r2 = llmin(d3,d4); return llmin(r1, r2); } template inline A llclamp(A a, MIN minval, MAX maxval) { if ( a < minval ) { return static_cast(minval); } else if ( a > maxval ) { return static_cast(maxval); } return a; } template inline LLDATATYPE llclampf(LLDATATYPE a) { return llmin(llmax(a, LLDATATYPE(0)), LLDATATYPE(1)); } template inline LLDATATYPE llclampb(LLDATATYPE a) { return llmin(llmax(a, LLDATATYPE(0)), LLDATATYPE(255)); } template inline void llswap(LLDATATYPE& lhs, LLDATATYPE& rhs) { std::swap(lhs, rhs); } #endif // LL_LLDEFS_H