StringHashRegister.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include "../Container/HashMap.h"
  5. #include "../Container/Ptr.h"
  6. #include "../Math/StringHash.h"
  7. #include <memory>
  8. namespace Urho3D
  9. {
  10. class Mutex;
  11. /// Helper class used for StringHash reversing.
  12. class URHO3D_API StringHashRegister
  13. {
  14. public:
  15. /// Construct. threadSafe controls whether the RegisterString and GetStringCopy are thread-safe.
  16. StringHashRegister(bool threadSafe);
  17. /// Destruct.
  18. ~StringHashRegister();
  19. /// Register string for hash reverse mapping. Could be used from StringHash ctor.
  20. StringHash RegisterString(const StringHash& hash, const char* string);
  21. /// Register string for hash reverse mapping.
  22. StringHash RegisterString(const char* string);
  23. /// Return string for given StringHash. Return empty string if not found.
  24. String GetStringCopy(const StringHash& hash) const;
  25. /// Return whether the string in contained in the register.
  26. bool Contains(const StringHash& hash) const;
  27. /// Return String for given StringHash. Return value is unsafe to use if RegisterString is called from other threads.
  28. const String& GetString(const StringHash& hash) const;
  29. /// Return map of hashes. Return value is unsafe to use if RegisterString is called from other threads.
  30. const StringMap& GetInternalMap() const { return map_; }
  31. private:
  32. /// Hash to string map.
  33. StringMap map_;
  34. /// Mutex.
  35. std::unique_ptr<Mutex> mutex_;
  36. };
  37. }