soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SResID.h
1#ifndef __SRESID__H__
2#define __SRESID__H__
3
4#include <tchar.h>
5
6#define MAX_RES_TYPE 30 // 资源类型预定义,最大长度不超过MAX_RES_TYPE
7#define MAX_RES_NAME 100 // 注意:给资源名称时,最大长度不要超过MAX_RES_NAME
8
9SNSBEGIN
10
11/**
12 * @class SResID
13 * @brief 资源标识符类
14 */
15class SResID {
16 public:
17 /**
18 * @brief 构造函数
19 * @param pszType 资源类型字符串
20 * @param pszName 资源名称字符串
21 */
22 SResID(LPCTSTR pszType, LPCTSTR pszName)
23 {
24 memset(this, 0, sizeof(SResID));
25 if (pszType)
26 _tcscpy_s(szType, MAX_RES_TYPE, pszType);
27 if (pszName)
28 _tcscpy_s(szName, MAX_RES_NAME, pszName);
29 _tcslwr(szType);
30 _tcslwr(szName);
31 }
32
33 /**
34 * @brief 资源类型字符串
35 */
36 TCHAR szType[MAX_RES_TYPE + 1];
37
38 /**
39 * @brief 资源名称字符串
40 */
41 TCHAR szName[MAX_RES_NAME + 1];
42};
43
44/**
45 * @class CElementTraits<SResID>
46 * @brief 特性类,用于定义SResID的哈希和比较操作
47 */
48template <>
49class CElementTraits<SResID> : public CElementTraitsBase<SResID> {
50 public:
51 /**
52 * @brief 计算SResID对象的哈希值
53 * @param resid SResID对象
54 * @return 哈希值
55 */
56 static ULONG Hash(INARGTYPE resid)
57 {
58 ULONG nHash = 0;
59
60 const TCHAR *pch = resid.szType;
61 while (*pch != 0)
62 {
63 nHash = (nHash << 5) + nHash + (*pch);
64 pch++;
65 }
66
67 pch = resid.szName;
68 while (*pch != 0)
69 {
70 nHash = (nHash << 5) + nHash + (*pch);
71 pch++;
72 }
73 return (nHash);
74 }
75
76 /**
77 * @brief 比较两个SResID对象是否相等
78 * @param element1 第一个SResID对象
79 * @param element2 第二个SResID对象
80 * @return 如果相等返回true,否则返回false
81 */
82 static bool CompareElements(INARGTYPE element1, INARGTYPE element2)
83 {
84 return _tcscmp(element1.szType, element2.szType) == 0 && _tcscmp(element1.szName, element2.szName) == 0;
85 }
86
87 /**
88 * @brief 比较两个SResID对象的顺序
89 * @param element1 第一个SResID对象
90 * @param element2 第二个SResID对象
91 * @return 如果element1小于element2返回负数,如果相等返回0,如果element1大于element2返回正数
92 */
93 static int CompareElementsOrdered(INARGTYPE element1, INARGTYPE element2)
94 {
95 int nRet = _tcscmp(element1.szType, element2.szType);
96 if (nRet == 0)
97 nRet = _tcscmp(element1.szName, element2.szName);
98 return nRet;
99 }
100};
101
102SNSEND
103#endif // __SRESID__H__
static bool CompareElements(INARGTYPE element1, INARGTYPE element2)
比较两个SResID对象是否相等
Definition SResID.h:82
static int CompareElementsOrdered(INARGTYPE element1, INARGTYPE element2)
比较两个SResID对象的顺序
Definition SResID.h:93
static ULONG Hash(INARGTYPE resid)
计算SResID对象的哈希值
Definition SResID.h:56
资源标识符类
Definition SResID.h:15
SResID(LPCTSTR pszType, LPCTSTR pszName)
构造函数
Definition SResID.h:22
TCHAR szType[30+1]
资源类型字符串
Definition SResID.h:36
TCHAR szName[100+1]
资源名称字符串
Definition SResID.h:41