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

#include "src/developer/debug/shared/logging/file_line_function.h"

#include "src/lib/files/path.h"
#include "src/lib/fxl/strings/string_printf.h"

namespace debug {

FileLineFunction::FileLineFunction() = default;
FileLineFunction::FileLineFunction(std::string file, int line, std::string function)
    : file_(std::move(file)), function_(std::move(function)), line_(line) {}
FileLineFunction::~FileLineFunction() = default;

bool operator<(const FileLineFunction& a, const FileLineFunction& b) {
  if (a.line() != b.line())
    return a.line() < b.line();
  return a.file() < b.file();
}

std::string FileLineFunction::ToString() const {
  return fxl::StringPrintf("[%s:%d][%s]", file_.data(), line_, function_.data());
}

bool operator==(const FileLineFunction& a, const FileLineFunction& b) {
  return a.line() == b.line() && a.file() == b.file();
}

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

}  // namespace debug
