ezEngine  Milestone 7
HashedString.h
1 #pragma once
2 
3 #include <Foundation/Algorithm/Hashing.h>
4 #include <Foundation/Containers/Map.h>
5 #include <Foundation/Strings/String.h>
6 #include <Foundation/Threading/AtomicInteger.h>
7 
9 
24 class EZ_FOUNDATION_DLL ezHashedString
25 {
26 public:
27  struct HashedData
28  {
29  ezAtomicInteger32 m_iRefCount;
30  ezUInt32 m_uiHash;
31  };
32 
34  typedef StringStorage::Iterator HashedType;
35 
45  static ezUInt32 ClearUnusedStrings();
46 
48  ezHashedString(); // [tested]
49 
51  ezHashedString(const ezHashedString& rhs); // [tested]
52 
54  ~ezHashedString();
55 
57  void operator= (const ezHashedString& rhs); // [tested]
58 
63  template <size_t N>
64  void Assign(const char(&szString)[N]); // [tested]
65 
70  void Assign(ezHashing::StringWrapper szString); // [tested]
71 
76  bool operator== (const ezHashedString& rhs) const; // [tested]
77 
79  bool operator!= (const ezHashedString& rhs) const; // [tested]
80 
83  bool operator== (const ezTempHashedString& rhs) const; // [tested]
84 
86  bool operator!= (const ezTempHashedString& rhs) const; // [tested]
87 
89  bool operator< (const ezHashedString& rhs) const; // [tested]
90 
92  bool operator< (const ezTempHashedString& rhs) const; // [tested]
93 
95  const ezString& GetString() const; // [tested]
96 
98  const char* GetData() const;
99 
101  ezUInt32 GetHash() const; // [tested]
102 
104  operator ezStringView() const { return GetString(); }
105 
107  operator const char*() const { return GetData(); }
108 
109 private:
110  static void InitHashedString();
111  static HashedType AddHashedString(const char* szString, ezUInt32 uiHash);
112 
113  HashedType m_Data;
114 };
115 
116 
122 class EZ_FOUNDATION_DLL ezTempHashedString
123 {
124  friend class ezHashedString;
125 
128 
129 public:
131  template <size_t N>
132  ezTempHashedString(const char(&szString)[N]); // [tested]
133 
135  ezTempHashedString(ezHashing::StringWrapper szString); // [tested]
136 
138  ezTempHashedString(const ezTempHashedString& rhs); // [tested]
139 
141  ezTempHashedString(const ezHashedString& rhs); // [tested]
142 
144  ezTempHashedString(ezUInt32 uiHash);
145 
147  template <size_t N>
148  void operator= (const char(&szString)[N]); // [tested]
149 
151  void operator= (ezHashing::StringWrapper szString); // [tested]
152 
154  void operator= (const ezTempHashedString& rhs); // [tested]
155 
157  void operator= (const ezHashedString& rhs); // [tested]
158 
160  bool operator== (const ezTempHashedString& rhs) const; // [tested]
161 
163  bool operator!= (const ezTempHashedString& rhs) const; // [tested]
164 
166  bool operator< (const ezTempHashedString& rhs) const; // [tested]
167 
169  ezUInt32 GetHash() const; // [tested]
170 
171 private:
172  ezUInt32 m_uiHash;
173 };
174 
175 
176 #include <Foundation/Strings/Implementation/HashedString_inl.h>