// Copyright 2015 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 BASE_TRACE_EVENT_MEMORY_ALLOCATOR_DUMP_GUID_H_
#define BASE_TRACE_EVENT_MEMORY_ALLOCATOR_DUMP_GUID_H_

#include <string>

#include "base/base_export.h"
#include "starboard/types.h"

namespace base {
namespace trace_event {

class BASE_EXPORT MemoryAllocatorDumpGuid {
 public:
  MemoryAllocatorDumpGuid();
  explicit MemoryAllocatorDumpGuid(uint64_t guid);

  // Utility ctor to hash a GUID if the caller prefers a string. The caller
  // still has to ensure that |guid_str| is unique, per snapshot, within the
  // global scope of all the traced processes.
  explicit MemoryAllocatorDumpGuid(const std::string& guid_str);

  uint64_t ToUint64() const { return guid_; }

  // Returns a (hex-encoded) string representation of the guid.
  std::string ToString() const;

  bool empty() const { return guid_ == 0u; }

  bool operator==(const MemoryAllocatorDumpGuid& other) const {
    return guid_ == other.guid_;
  }

  bool operator!=(const MemoryAllocatorDumpGuid& other) const {
    return !(*this == other);
  }

  bool operator<(const MemoryAllocatorDumpGuid& other) const {
    return guid_ < other.guid_;
  }

 private:
  uint64_t guid_;

  // Deliberately copy-able.
};

}  // namespace trace_event
}  // namespace base

#endif  // BASE_TRACE_EVENT_MEMORY_ALLOCATOR_DUMP_GUID_H_
