// 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 "base/strings/string_piece.h"
#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 base::StringPiece& 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_
