// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_SURFACES_SURFACE_SEQUENCE_H_
#define CC_SURFACES_SURFACE_SEQUENCE_H_

#include <stddef.h>
#include <stdint.h>

#include <tuple>

#include "base/hash.h"
#include "cc/surfaces/frame_sink_id.h"

namespace cc {

// A per-surface-namespace sequence number that's used to coordinate
// dependencies between frames. A sequence number may be satisfied once, and
// may be depended on once.
struct SurfaceSequence {
  SurfaceSequence() : sequence(0u) {}
  SurfaceSequence(const FrameSinkId& frame_sink_id, uint32_t sequence)
      : frame_sink_id(frame_sink_id), sequence(sequence) {}
  bool is_null() const { return frame_sink_id.is_null() && sequence == 0u; }

  FrameSinkId frame_sink_id;
  uint32_t sequence;
};

inline bool operator==(const SurfaceSequence& a, const SurfaceSequence& b) {
  return a.frame_sink_id == b.frame_sink_id && a.sequence == b.sequence;
}

inline bool operator!=(const SurfaceSequence& a, const SurfaceSequence& b) {
  return !(a == b);
}

inline bool operator<(const SurfaceSequence& a, const SurfaceSequence& b) {
  return std::tie(a.frame_sink_id, a.sequence) <
         std::tie(b.frame_sink_id, b.sequence);
}

struct SurfaceSequenceHash {
  size_t operator()(SurfaceSequence key) const {
    return base::HashInts(static_cast<uint64_t>(key.frame_sink_id.hash()),
                          key.sequence);
  }
};

}  // namespace cc

#endif  // CC_SURFACES_SURFACE_SEQUENCE_H_
