/** * @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 inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2) { return (d1 > d2) ? d1 : d2; } template inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3) { LLDATATYPE r = llmax(d1,d2); return (r > d3 ? r : d3); } template inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2) { return (d1 < d2) ? d1 : d2; } template inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3) { LLDATATYPE r = llmin(d1,d2); return (r < d3 ? r : d3); } template inline LLDATATYPE llclamp(const LLDATATYPE& a, const LLDATATYPE& minval, const LLDATATYPE& maxval) { return llmin(llmax(a, minval), maxval); } template inline LLDATATYPE llclampf(const LLDATATYPE& a) { return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)1); } template inline LLDATATYPE llclampb(const LLDATATYPE& a) { return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)255); } #endif // LL_LLDEFS_H