Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / cc / surfaces / surface_id.h
index aa9474d..fa17286 100644 (file)
@@ -5,15 +5,18 @@
 #ifndef CC_SURFACES_SURFACE_ID_H_
 #define CC_SURFACES_SURFACE_ID_H_
 
+#include "base/compiler_specific.h"
+#include "base/containers/hash_tables.h"
+
 namespace cc {
 
 struct SurfaceId {
   SurfaceId() : id(0) {}
-  explicit SurfaceId(int id) : id(id) {}
+  explicit SurfaceId(uint64_t id) : id(id) {}
 
   bool is_null() const { return id == 0; }
 
-  int id;
+  uint64_t id;
 };
 
 inline bool operator==(const SurfaceId& a, const SurfaceId& b) {
@@ -24,6 +27,27 @@ inline bool operator!=(const SurfaceId& a, const SurfaceId& b) {
   return !(a == b);
 }
 
+inline bool operator<(const SurfaceId& a, const SurfaceId& b) {
+  return a.id < b.id;
+}
+
 }  // namespace cc
 
+namespace BASE_HASH_NAMESPACE {
+#if defined(COMPILER_MSVC)
+inline size_t hash_value(const cc::SurfaceId& key) {
+  return hash_value(key.id);
+}
+#elif defined(COMPILER_GCC)
+template <>
+struct hash<cc::SurfaceId> {
+  size_t operator()(cc::SurfaceId key) const {
+    return hash<uint64_t>()(key.id);
+  }
+};
+#else
+#error define a hash function for your compiler
+#endif  // COMPILER
+}  // namespace BASE_HASH_NAMESPACE
+
 #endif  // CC_SURFACES_SURFACE_ID_H_