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

#pragma once

#include <string>

namespace debug_ipc {

#define FROM_HERE \
  ::debug_ipc::FileLineFunction(__FILE__, __LINE__, __PRETTY_FUNCTION__)
#define FROM_HERE_NO_FUNC ::debug_ipc::FileLineFunction(__FILE__, __LINE__);

class FileLineFunction {
 public:
  FileLineFunction();
  FileLineFunction(std::string file, int line, std::string function = "");
  ~FileLineFunction();

  bool is_valid() const { return !file_.empty() && line_ > 0; }

  const std::string& file() const { return file_; }
  int line() const { return line_; }

  std::string ToString() const;

 private:
  std::string file_;
  std::string function_;
  int line_ = 0;
};

// Comparison function for use in set and map.
bool operator<(const FileLineFunction& a, const FileLineFunction& b);

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

}  // namespace debug_ipc
