|  | // Copyright 2014 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_SUBSTITUTION_LIST_H_ | 
|  | #define TOOLS_GN_SUBSTITUTION_LIST_H_ | 
|  |  | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "tools/gn/substitution_pattern.h" | 
|  |  | 
|  | // Represents a list of strings with {{substitution_patterns}} in them. | 
|  | class SubstitutionList { | 
|  | public: | 
|  | SubstitutionList(); | 
|  | SubstitutionList(const SubstitutionList& other); | 
|  | ~SubstitutionList(); | 
|  |  | 
|  | bool Parse(const Value& value, Err* err); | 
|  | bool Parse(const std::vector<std::string>& values, | 
|  | const ParseNode* origin, | 
|  | Err* err); | 
|  |  | 
|  | // Makes a SubstitutionList from the given hardcoded patterns. | 
|  | static SubstitutionList MakeForTest(const char* a, | 
|  | const char* b = nullptr, | 
|  | const char* c = nullptr); | 
|  |  | 
|  | const std::vector<SubstitutionPattern>& list() const { return list_; } | 
|  |  | 
|  | // Returns a list of all substitution types used by the patterns in this | 
|  | // list, with the exception of LITERAL. | 
|  | const std::vector<const Substitution*>& required_types() const { | 
|  | return required_types_; | 
|  | } | 
|  |  | 
|  | void FillRequiredTypes(SubstitutionBits* bits) const; | 
|  |  | 
|  | private: | 
|  | std::vector<SubstitutionPattern> list_; | 
|  |  | 
|  | std::vector<const Substitution*> required_types_; | 
|  | }; | 
|  |  | 
|  | #endif  // TOOLS_GN_SUBSTITUTION_LIST_H_ |