Home | History | Annotate | Download | only in surfaces
      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 {
     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 
     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)
     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