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_ITEM_H_ 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#define TOOLS_GN_ITEM_H_ 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include <string> 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/label.h" 11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Config; 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Target; 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Toolchain; 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// A named item (target, config, etc.) that participates in the dependency 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// graph. 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Item { 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch public: 20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch Item(const Label& label); 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual ~Item(); 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const Label& label() const { return label_; } 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Manual RTTI. 26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual Config* AsConfig(); 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual const Config* AsConfig() const; 28d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual Target* AsTarget(); 29d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual const Target* AsTarget() const; 30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual Toolchain* AsToolchain(); 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual const Toolchain* AsToolchain() const; 32d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 33d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Returns a name like "target" or "config" for the type of item this is, to 34d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // be used in logging and error messages. 35d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string GetItemTypeName() const; 36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 37d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Called when this item is resolved, meaning it and all of its dependents 38d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // have no unresolved deps. 39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual void OnResolved() {} 40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch private: 42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch Label label_; 43d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}; 44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#endif // TOOLS_GN_ITEM_H_ 46