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
11namespace cc {
12
13struct SurfaceId {
14  SurfaceId() : id(0) {}
15  explicit SurfaceId(uint64_t id) : id(id) {}
16
17  bool is_null() const { return id == 0; }
18
19  uint64_t id;
20};
21
22inline bool operator==(const SurfaceId& a, const SurfaceId& b) {
23  return a.id == b.id;
24}
25
26inline bool operator!=(const SurfaceId& a, const SurfaceId& b) {
27  return !(a == b);
28}
29
30inline bool operator<(const SurfaceId& a, const SurfaceId& b) {
31  return a.id < b.id;
32}
33
34}  // namespace cc
35
36namespace BASE_HASH_NAMESPACE {
37#if defined(COMPILER_MSVC)
38inline size_t hash_value(const cc::SurfaceId& key) {
39  return hash_value(key.id);
40}
41#elif defined(COMPILER_GCC)
42template <>
43struct 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