blob: 559b25d1747d3eb97474b0d3a5b8edd8acec9c87 [file] [log] [blame]
// 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 "gn/substitution_pattern.h"
// Represents a list of strings with {{substitution_patterns}} in them.
class SubstitutionList {
public:
SubstitutionList();
SubstitutionList(const SubstitutionList& other);
~SubstitutionList();
SubstitutionList& operator=(const SubstitutionList&) = default;
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_