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