• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CC_SURFACES_SURFACE_ID_H_
6 #define CC_SURFACES_SURFACE_ID_H_
7 
8 #include "base/compiler_specific.h"
9 #include "base/containers/hash_tables.h"
10 
11 namespace cc {
12 
13 struct SurfaceId {
SurfaceIdSurfaceId14   SurfaceId() : id(0) {}
SurfaceIdSurfaceId15   explicit SurfaceId(uint64_t id) : id(id) {}
16 
is_nullSurfaceId17   bool is_null() const { return id == 0; }
18 
19   uint64_t id;
20 };
21 
22 inline bool operator==(const SurfaceId& a, const SurfaceId& b) {
23   return a.id == b.id;
24 }
25 
26 inline bool operator!=(const SurfaceId& a, const SurfaceId& b) {
27   return !(a == b);
28 }
29 
30 inline bool operator<(const SurfaceId& a, const SurfaceId& b) {
31   return a.id < b.id;
32 }
33 
34 }  // namespace cc
35 
36 namespace BASE_HASH_NAMESPACE {
37 #if defined(COMPILER_MSVC)
hash_value(const cc::SurfaceId & key)38 inline size_t hash_value(const cc::SurfaceId& key) {
39   return hash_value(key.id);
40 }
41 #elif defined(COMPILER_GCC)
42 template <>
43 struct hash<cc::SurfaceId> {
44   size_t operator()(cc::SurfaceId key) const {
45     return hash<uint64_t>()(key.id);
46   }
47 };
48 #else
49 #error define a hash function for your compiler
50 #endif  // COMPILER
51 }  // namespace BASE_HASH_NAMESPACE
52 
53 #endif  // CC_SURFACES_SURFACE_ID_H_
54