// 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 <stdint.h>

#include <string>

#include "base/base_export.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_
