config_values_extractors.h revision 2385ea399aae016c0806a4f9ef3c9cfe3d2a39df
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_CONFIG_VALUES_EXTRACTORS_H_ 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#define TOOLS_GN_CONFIG_VALUES_EXTRACTORS_H_ 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include <ostream> 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include <string> 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include <vector> 11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/config.h" 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/config_values.h" 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/target.h" 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochtemplate<typename T, class Writer> 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochinline void ConfigValuesToStream( 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const ConfigValues& values, 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const std::vector<T>& (ConfigValues::* getter)() const, 20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const Writer& writer, 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::ostream& out) { 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const std::vector<T>& v = (values.*getter)(); 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch for (size_t i = 0; i < v.size(); i++) 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch writer(v[i], out); 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}; 26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// Writes a given config value that applies to a given target. This collects 282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// all values from the target itself and all configs that apply, and writes 292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// then in order. 30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochtemplate<typename T, class Writer> 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochinline void RecursiveTargetConfigToStream( 32d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const Target* target, 33d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const std::vector<T>& (ConfigValues::* getter)() const, 34d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const Writer& writer, 35d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::ostream& out) { 362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // Note: if you make any changes to this, also change the writer in the 372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // implementation of the "desc" command. 382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 392385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // First write the values from the config itself. 402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch ConfigValuesToStream(target->config_values(), getter, writer, out); 412385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 422385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // Then write the configs in order. 432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch for (size_t i = 0; i < target->configs().size(); i++) { 44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ConfigValuesToStream(target->configs()[i]->config_values(), getter, 45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch writer, out); 46d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 47d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Writes the values out as strings with no transformation. 50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochvoid RecursiveTargetConfigStringsToStream( 51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const Target* target, 52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const std::vector<std::string>& (ConfigValues::* getter)() const, 53d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::ostream& out); 54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 55d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#endif // TOOLS_GN_CONFIG_VALUES_EXTRACTORS_H_ 56