00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00036 class PG_API pgID
00037 {
00038 public:
00039 pgDefineException(ExceptionInvalidArgument);
00040 pgDefineException(ExceptionOutOfID);
00041
00042 static const pgID ZERO;
00043
00047 pgID();
00048
00054 bool operator==(pgID id) const;
00055
00061 bool operator!=(pgID id) const;
00062
00069 u32 operator%(u32 n) const;
00070
00075 u32 getValue() const;
00076
00081 static pgID genID();
00082
00089 static pgID genID(const char* str);
00090
00096 static pgID genIDForSystem(u32 value);
00097
00102 static void setCurIDForSystem(u32 value);
00103
00104 private:
00105 static const u32 BIT_NUM = 32;
00106 static const u32 MAX_ID = (static_cast<u64>(1) << (BIT_NUM - 1)) - 1;
00107
00108 u32 m_id;
00109
00110 static u32 m_cur_id;
00111 };
00112
00113
00120 #define pgID_(str) pgID::genIDForSystem(PG_ID_00(str, sizeof("" str)))
00121
00122
00123 #define PG_ID_00(str, len) ((len <= 1) ? 0 : (PG_ID_01(str, len - 1) | 0x80000000))
00124 #define PG_ID_01(str, len) ((len <= 1) ? str[0] : PG_ID_02(str, len - 1) * 37 + str[len - 1])
00125 #define PG_ID_02(str, len) ((len <= 1) ? str[0] : PG_ID_03(str, len - 1) * 37 + str[len - 1])
00126 #define PG_ID_03(str, len) ((len <= 1) ? str[0] : PG_ID_04(str, len - 1) * 37 + str[len - 1])
00127 #define PG_ID_04(str, len) ((len <= 1) ? str[0] : PG_ID_05(str, len - 1) * 37 + str[len - 1])
00128 #define PG_ID_05(str, len) ((len <= 1) ? str[0] : PG_ID_06(str, len - 1) * 37 + str[len - 1])
00129 #define PG_ID_06(str, len) ((len <= 1) ? str[0] : PG_ID_07(str, len - 1) * 37 + str[len - 1])
00130 #define PG_ID_07(str, len) ((len <= 1) ? str[0] : PG_ID_08(str, len - 1) * 37 + str[len - 1])
00131 #define PG_ID_08(str, len) ((len <= 1) ? str[0] : PG_ID_09(str, len - 1) * 37 + str[len - 1])
00132 #define PG_ID_09(str, len) ((len <= 1) ? str[0] : PG_ID_10(str, len - 1) * 37 + str[len - 1])
00133 #define PG_ID_10(str, len) ((len <= 1) ? str[0] : PG_ID_11(str, len - 1) * 37 + str[len - 1])
00134 #define PG_ID_11(str, len) ((len <= 1) ? str[0] : PG_ID_12(str, len - 1) * 37 + str[len - 1])
00135 #define PG_ID_12(str, len) ((len <= 1) ? str[0] : PG_ID_13(str, len - 1) * 37 + str[len - 1])
00136 #define PG_ID_13(str, len) ((len <= 1) ? str[0] : PG_ID_14(str, len - 1) * 37 + str[len - 1])
00137 #define PG_ID_14(str, len) ((len <= 1) ? str[0] : PG_ID_15(str, len - 1) * 37 + str[len - 1])
00138 #define PG_ID_15(str, len) ((len <= 1) ? str[0] : PG_ID_16(str, len - 1) * 37 + str[len - 1])
00139 #define PG_ID_16(str, len) ((len <= 1) ? str[0] : PG_ID_17(str, len - 1) * 37 + str[len - 1])
00140 #define PG_ID_17(str, len) ((len <= 1) ? str[0] : PG_ID_18(str, len - 1) * 37 + str[len - 1])
00141 #define PG_ID_18(str, len) ((len <= 1) ? str[0] : PG_ID_19(str, len - 1) * 37 + str[len - 1])
00142 #define PG_ID_19(str, len) ((len <= 1) ? str[0] : PG_ID_20(str, len - 1) * 37 + str[len - 1])
00143 #define PG_ID_20(str, len) ((len <= 1) ? str[0] : PG_ID_21(str, len - 1) * 37 + str[len - 1])
00144 #define PG_ID_21(str, len) ((len <= 1) ? str[0] : PG_ID_22(str, len - 1) * 37 + str[len - 1])
00145 #define PG_ID_22(str, len) ((len <= 1) ? str[0] : PG_ID_23(str, len - 1) * 37 + str[len - 1])
00146 #define PG_ID_23(str, len) ((len <= 1) ? str[0] : PG_ID_24(str, len - 1) * 37 + str[len - 1])
00147 #define PG_ID_24(str, len) ((len <= 1) ? str[0] : PG_ID_25(str, len - 1) * 37 + str[len - 1])
00148 #define PG_ID_25(str, len) ((len <= 1) ? str[0] : PG_ID_26(str, len - 1) * 37 + str[len - 1])
00149 #define PG_ID_26(str, len) ((len <= 1) ? str[0] : PG_ID_27(str, len - 1) * 37 + str[len - 1])
00150 #define PG_ID_27(str, len) ((len <= 1) ? str[0] : PG_ID_28(str, len - 1) * 37 + str[len - 1])
00151 #define PG_ID_28(str, len) ((len <= 1) ? str[0] : PG_ID_29(str, len - 1) * 37 + str[len - 1])
00152 #define PG_ID_29(str, len) ((len <= 1) ? str[0] : PG_ID_30(str, len - 1) * 37 + str[len - 1])
00153 #define PG_ID_30(str, len) ((len <= 1) ? str[0] : PG_ID_31(str, len - 1) * 37 + str[len - 1])
00154 #define PG_ID_31(str, len) ((len <= 1) ? str[0] : PG_ID_32(str, len - 1) * 37 + str[len - 1])
00155 #define PG_ID_32(str, len) ((len <= 1) ? str[0] : 0)