1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef TOOLS_GN_IMPORT_MANAGER_H_ 6#define TOOLS_GN_IMPORT_MANAGER_H_ 7 8#include <map> 9 10#include "base/synchronization/lock.h" 11 12class Err; 13class ParseNode; 14class Scope; 15class SourceFile; 16 17// Provides a cache of the results of importing scopes so the results can 18// be re-used rather than running the imported files multiple times. 19class ImportManager { 20 public: 21 ImportManager(); 22 ~ImportManager(); 23 24 // Does an import of the given file into the given scope. On error, sets the 25 // error and returns false. 26 bool DoImport(const SourceFile& file, 27 const ParseNode* node_for_err, 28 Scope* scope, 29 Err* err); 30 31 private: 32 base::Lock lock_; 33 34 // Owning pointers to the scopes. 35 typedef std::map<SourceFile, const Scope*> ImportMap; 36 ImportMap imports_; 37 38 DISALLOW_COPY_AND_ASSIGN(ImportManager); 39}; 40 41#endif // TOOLS_GN_IMPORT_MANAGER_H_ 42