// 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 TOOLS_GN_LIB_FILE_H_
#define TOOLS_GN_LIB_FILE_H_

#include <stddef.h>

#include <algorithm>
#include <string>
#include <string_view>

#include "tools/gn/source_file.h"

// Represents an entry in "libs" list. Can be either a path (a SourceFile) or
// a library name (a string).
class LibFile {
 public:
  LibFile() = default;

  explicit LibFile(const std::string_view& lib_name);
  explicit LibFile(const SourceFile& source_file);

  bool is_source_file() const { return name_.empty(); }

  // Returns name, or source_file().value() (whichever is set).
  const std::string& value() const;
  const SourceFile& source_file() const;

  bool operator==(const LibFile& other) const {
    return value() == other.value();
  }
  bool operator!=(const LibFile& other) const { return !operator==(other); }
  bool operator<(const LibFile& other) const { return value() < other.value(); }

 private:
  std::string name_;
  SourceFile source_file_;
};

namespace std {

template <>
struct hash<LibFile> {
  std::size_t operator()(const LibFile& v) const {
    hash<std::string> h;
    return h(v.value());
  }
};

}  // namespace std

#endif  // TOOLS_GN_LIB_FILE_H_
