output_file.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file. 4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#ifndef TOOLS_GN_OUTPUT_FILE_H_ 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#define TOOLS_GN_OUTPUT_FILE_H_ 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include <string> 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/containers/hash_tables.h" 11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/build_settings.h" 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/source_file.h" 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// A simple wrapper around a string that indicates the string is a path 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// relative to the output directory. 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass OutputFile { 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch public: 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch OutputFile() : value_() {} 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch explicit OutputFile(const base::StringPiece& str) 20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch : value_(str.data(), str.size()) { 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string& value() { return value_; } 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const std::string& value() const { return value_; } 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Converts to a SourceFile by prepending the build directory to the file. 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch SourceFile GetSourceFile(const BuildSettings* build_settings) const { 28d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return SourceFile(build_settings->build_dir().value() + value_); 29d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch bool operator==(const OutputFile& other) const { 32d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return value_ == other.value_; 33d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 34d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch bool operator!=(const OutputFile& other) const { 35d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return value_ != other.value_; 36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool operator<(const OutputFile& other) const { 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return value_ < other.value_; 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch private: 42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string value_; 43d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}; 44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace BASE_HASH_NAMESPACE { 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(COMPILER_GCC) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)template<> struct hash<OutputFile> { 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::size_t operator()(const OutputFile& v) const { 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) hash<std::string> h; 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return h(v.value()); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#elif defined(COMPILER_MSVC) 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)inline size_t hash_value(const OutputFile& v) { 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return hash_value(v.value()); 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // COMPILER... 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace BASE_HASH_NAMESPACE 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)inline void swap(OutputFile& lhs, OutputFile& rhs) { 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) lhs.value().swap(rhs.value()); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // TOOLS_GN_OUTPUT_FILE_H_ 67