llnamevalue.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llnamevalue.h
  3.  * @brief class for defining name value pairs.
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLNAMEVALUE_H
  33. #define LL_LLNAMEVALUE_H
  34. // As of January 2008, I believe we only use the following name-value
  35. // pairs.  This is hard to prove because they are initialized from
  36. // strings.  JC
  37. //
  38. // FirstName STRING
  39. // LastName STRING
  40. // AttachPt U32
  41. // AttachmentItemId STRING
  42. // Title STRING
  43. // AttachmentOffset VEC3
  44. // AttachmentOrientation VEC3
  45. // SitObject STRING
  46. // SitPosition VEC3
  47. #include "string_table.h"
  48. #include "llmath.h"
  49. #include "v3math.h"
  50. #include "lldbstrings.h"
  51. class LLNameValue;
  52. class LLStringTable;
  53. typedef enum e_name_value_types
  54. {
  55. NVT_NULL,
  56. NVT_STRING,
  57. NVT_F32,
  58. NVT_S32,
  59. NVT_VEC3,
  60. NVT_U32,
  61. NVT_CAMERA, // Deprecated, but leaving in case removing this will cause problems
  62. NVT_ASSET,
  63. NVT_U64,
  64. NVT_EOF
  65. } ENameValueType;
  66. typedef enum e_name_value_class
  67. {
  68. NVC_NULL,
  69. NVC_READ_ONLY,
  70. NVC_READ_WRITE,
  71. NVC_EOF
  72. } ENameValueClass;
  73. typedef enum e_name_value_sento
  74. {
  75. NVS_NULL,
  76. NVS_SIM,
  77. NVS_DATA_SIM,
  78. NVS_SIM_VIEWER,
  79. NVS_DATA_SIM_VIEWER,
  80. NVS_EOF
  81. } ENameValueSendto;
  82. // NameValues can always be "printed" into a buffer of this length.
  83. const U32 NAME_VALUE_BUF_SIZE = 1024;
  84. const U32 NAME_VALUE_TYPE_STRING_LENGTH = 8;
  85. const U32 NAME_VALUE_CLASS_STRING_LENGTH = 16;
  86. const U32 NAME_VALUE_SENDTO_STRING_LENGTH = 18;
  87. const U32 NAME_VALUE_DATA_SIZE = 
  88. NAME_VALUE_BUF_SIZE - 
  89. ( DB_NV_NAME_BUF_SIZE +
  90. NAME_VALUE_TYPE_STRING_LENGTH +
  91. NAME_VALUE_CLASS_STRING_LENGTH + 
  92. NAME_VALUE_SENDTO_STRING_LENGTH );
  93. extern char NameValueTypeStrings[NVT_EOF][NAME_VALUE_TYPE_STRING_LENGTH]; /* Flawfinder: Ignore */
  94. extern char NameValueClassStrings[NVC_EOF][NAME_VALUE_CLASS_STRING_LENGTH]; /* Flawfinder: Ignore */
  95. extern char NameValueSendtoStrings[NVS_EOF][NAME_VALUE_SENDTO_STRING_LENGTH]; /* Flawfinder: Ignore */
  96. typedef union u_name_value_reference
  97. {
  98. char *string;
  99. F32 *f32;
  100. S32 *s32;
  101. LLVector3 *vec3;
  102. U32 *u32;
  103. U64 *u64;
  104. } UNameValueReference;
  105. class LLNameValue
  106. {
  107. public:
  108. void baseInit();
  109. void init(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto );
  110. LLNameValue();
  111. LLNameValue(const char *data);
  112. LLNameValue(const char *name, const char *type, const char *nvclass );
  113. LLNameValue(const char *name, const char *data, const char *type, const char *nvclass );
  114. LLNameValue(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto );
  115. ~LLNameValue();
  116. char *getString();
  117. const char *getAsset() const;
  118. F32 *getF32();
  119. S32 *getS32();
  120. void getVec3(LLVector3 &vec);
  121. LLVector3 *getVec3();
  122. U32 *getU32();
  123. U64 *getU64();
  124. const char *getType() const { return mStringType; }
  125. const char *getClass() const { return mStringClass; }
  126. const char *getSendto() const { return mStringSendto; }
  127. BOOL sendToData() const;
  128. BOOL sendToViewer() const;
  129. void callCallback();
  130. std::string printNameValue() const;
  131. std::string printData() const;
  132. ENameValueType getTypeEnum() const { return mType; }
  133. ENameValueClass getClassEnum() const { return mClass; }
  134. ENameValueSendto getSendtoEnum() const { return mSendto; }
  135. LLNameValue &operator=(const LLNameValue &a);
  136. void setString(const char *a);
  137. void setAsset(const char *a);
  138. void setF32(const F32 a);
  139. void setS32(const S32 a);
  140. void setVec3(const LLVector3 &a);
  141. void setU32(const U32 a);
  142. friend std::ostream& operator<<(std::ostream& s, const LLNameValue &a);
  143. private:
  144. void printNameValue(std::ostream& s);
  145. public:
  146. char *mName;
  147. char *mStringType;
  148. ENameValueType mType;
  149. char *mStringClass;
  150. ENameValueClass mClass;
  151. char *mStringSendto;
  152. ENameValueSendto mSendto;
  153. UNameValueReference mNameValueReference;
  154. LLStringTable *mNVNameTable;
  155. };
  156. extern LLStringTable gNVNameTable;
  157. #endif