diff options
Diffstat (limited to 'indra/llcommon/lldefs.h')
-rw-r--r-- | indra/llcommon/lldefs.h | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/indra/llcommon/lldefs.h b/indra/llcommon/lldefs.h new file mode 100644 index 0000000000..63322effbe --- /dev/null +++ b/indra/llcommon/lldefs.h @@ -0,0 +1,185 @@ +/** + * @file lldefs.h + * @brief Various generic constant definitions. + * + * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLDEFS_H +#define LL_LLDEFS_H + +#include "stdtypes.h" + +// 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 LL_SOUND_FLAG_NONE = 0x00; +const U8 LL_SOUND_FLAG_LOOP = 0x01; +const U8 LL_SOUND_FLAG_SYNC_MASTER = 0x02; +const U8 LL_SOUND_FLAG_SYNC_SLAVE = 0x04; +const U8 LL_SOUND_FLAG_SYNC_PENDING = 0x08; +const U8 LL_SOUND_FLAG_SYNC_MASK = LL_SOUND_FLAG_SYNC_MASTER | LL_SOUND_FLAG_SYNC_SLAVE | LL_SOUND_FLAG_SYNC_PENDING; +const U8 LL_SOUND_FLAG_QUEUE = 0x10; + +const U32 gDirOpposite[8] = {2, 3, 0, 1, 6, 7, 4, 5}; +const U32 gDirAdjacent[8][2] = { + {4, 7}, + {4, 5}, + {5, 6}, + {6, 7}, + {0, 1}, + {1, 2}, + {2, 3}, + {0, 3} + }; + +// Magnitude along the x and y axis +const S32 gDirAxes[8][2] = { + { 1, 0}, // east + { 0, 1}, // north + {-1, 0}, // west + { 0,-1}, // south + { 1, 1}, // ne + {-1, 1}, // nw + {-1,-1}, // sw + { 1,-1}, // se + }; + +const U8 EAST_MASK = 1; +const U8 NORTH_MASK = 2; +const U8 WEST_MASK = 4; +const U8 SOUTH_MASK = 8; +const U8 NORTHEAST_MASK = NORTH_MASK | EAST_MASK; +const U8 NORTHWEST_MASK = NORTH_MASK | WEST_MASK; +const U8 SOUTHWEST_MASK = SOUTH_MASK | WEST_MASK; +const U8 SOUTHEAST_MASK = SOUTH_MASK | EAST_MASK; + +const S32 gDirMasks[8] = { + EAST_MASK, + NORTH_MASK, + WEST_MASK, + SOUTH_MASK, + NORTHEAST_MASK, + NORTHWEST_MASK, + SOUTHWEST_MASK, + SOUTHEAST_MASK + }; + +// Sides of a box... +// . Z __.Y +// /|\ /| 0 = NO_SIDE +// | / 1 = FRONT_SIDE = +x +// +------|-----------+ 2 = BACK_SIDE = -x +// /| |/ / /| 3 = LEFT_SIDE = +y +// / | -5- |/ / | 4 = RIGHT_SIDE = -y +// / | /| -3- / | 5 = TOP_SIDE = +z +// +------------------+ | 6 = BOTTOM_SIDE = -z +// | | | / | | +// | |/| | / | |/| +// | 2 | | *-------|-1--------> 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 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) +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 <class LLDATATYPE> +inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2) +{ + return (d1 > d2) ? d1 : d2; +} + +template <class LLDATATYPE> +inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3) +{ + LLDATATYPE r = llmax(d1,d2); + return (r > d3 ? r : d3); +} + +template <class LLDATATYPE> +inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2) +{ + return (d1 < d2) ? d1 : d2; +} + +template <class LLDATATYPE> +inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3) +{ + LLDATATYPE r = llmin(d1,d2); + return (r < d3 ? r : d3); +} + +template <class LLDATATYPE> +inline LLDATATYPE llclamp(const LLDATATYPE& a, const LLDATATYPE& minval, const LLDATATYPE& maxval) +{ + return llmin(llmax(a, minval), maxval); +} + +template <class LLDATATYPE> +inline LLDATATYPE llclampf(const LLDATATYPE& a) +{ + return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)1); +} + +template <class LLDATATYPE> +inline LLDATATYPE llclampb(const LLDATATYPE& a) +{ + return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)255); +} + +#endif // LL_LLDEFS_H |