16d528ed9Sopenharmony_ci// Copyright (c) 2013 The Chromium Authors. All rights reserved. 26d528ed9Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be 36d528ed9Sopenharmony_ci// found in the LICENSE file. 46d528ed9Sopenharmony_ci 56d528ed9Sopenharmony_ci#ifndef TOOLS_GN_OUTPUT_FILE_H_ 66d528ed9Sopenharmony_ci#define TOOLS_GN_OUTPUT_FILE_H_ 76d528ed9Sopenharmony_ci 86d528ed9Sopenharmony_ci#include <stddef.h> 96d528ed9Sopenharmony_ci 106d528ed9Sopenharmony_ci#include <string> 116d528ed9Sopenharmony_ci 126d528ed9Sopenharmony_ciclass BuildSettings; 136d528ed9Sopenharmony_ciclass SourceDir; 146d528ed9Sopenharmony_ciclass SourceFile; 156d528ed9Sopenharmony_ci 166d528ed9Sopenharmony_ci// A simple wrapper around a string that indicates the string is a path 176d528ed9Sopenharmony_ci// relative to the output directory. 186d528ed9Sopenharmony_ciclass OutputFile { 196d528ed9Sopenharmony_ci public: 206d528ed9Sopenharmony_ci OutputFile() = default; 216d528ed9Sopenharmony_ci 226d528ed9Sopenharmony_ci explicit OutputFile(std::string&& v); 236d528ed9Sopenharmony_ci explicit OutputFile(const std::string& v); 246d528ed9Sopenharmony_ci 256d528ed9Sopenharmony_ci OutputFile(const BuildSettings* build_settings, 266d528ed9Sopenharmony_ci const SourceFile& source_file); 276d528ed9Sopenharmony_ci 286d528ed9Sopenharmony_ci std::string& value() { return value_; } 296d528ed9Sopenharmony_ci const std::string& value() const { return value_; } 306d528ed9Sopenharmony_ci 316d528ed9Sopenharmony_ci // Converts to a SourceFile by prepending the build directory to the file. 326d528ed9Sopenharmony_ci // The *Dir version requires that the current OutputFile ends in a slash, and 336d528ed9Sopenharmony_ci // the *File version is the opposite. 346d528ed9Sopenharmony_ci SourceFile AsSourceFile(const BuildSettings* build_settings) const; 356d528ed9Sopenharmony_ci SourceDir AsSourceDir(const BuildSettings* build_settings) const; 366d528ed9Sopenharmony_ci 376d528ed9Sopenharmony_ci bool operator==(const OutputFile& other) const { 386d528ed9Sopenharmony_ci return value_ == other.value_; 396d528ed9Sopenharmony_ci } 406d528ed9Sopenharmony_ci bool operator!=(const OutputFile& other) const { 416d528ed9Sopenharmony_ci return value_ != other.value_; 426d528ed9Sopenharmony_ci } 436d528ed9Sopenharmony_ci bool operator<(const OutputFile& other) const { 446d528ed9Sopenharmony_ci return value_ < other.value_; 456d528ed9Sopenharmony_ci } 466d528ed9Sopenharmony_ci 476d528ed9Sopenharmony_ci private: 486d528ed9Sopenharmony_ci std::string value_; 496d528ed9Sopenharmony_ci}; 506d528ed9Sopenharmony_ci 516d528ed9Sopenharmony_cinamespace std { 526d528ed9Sopenharmony_ci 536d528ed9Sopenharmony_citemplate <> 546d528ed9Sopenharmony_cistruct hash<OutputFile> { 556d528ed9Sopenharmony_ci std::size_t operator()(const OutputFile& v) const { 566d528ed9Sopenharmony_ci hash<std::string> h; 576d528ed9Sopenharmony_ci return h(v.value()); 586d528ed9Sopenharmony_ci } 596d528ed9Sopenharmony_ci}; 606d528ed9Sopenharmony_ci 616d528ed9Sopenharmony_ci} // namespace std 626d528ed9Sopenharmony_ci 636d528ed9Sopenharmony_ci#endif // TOOLS_GN_OUTPUT_FILE_H_ 64