// Copyright (c) 2013 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_IMPORT_MANAGER_H_
#define TOOLS_GN_IMPORT_MANAGER_H_

#include <map>
#include <memory>
#include <unordered_set>
#include <vector>

#include "base/macros.h"
#include "base/synchronization/lock.h"

class Err;
class ParseNode;
class Scope;
class SourceFile;

// Provides a cache of the results of importing scopes so the results can
// be re-used rather than running the imported files multiple times.
class ImportManager {
 public:
  ImportManager();
  ~ImportManager();

  // Does an import of the given file into the given scope. On error, sets the
  // error and returns false.
  bool DoImport(const SourceFile& file,
                const ParseNode* node_for_err,
                Scope* scope,
                Err* err);

  std::vector<SourceFile> GetImportedFiles() const;

 private:
  struct ImportInfo;

  // Protects access to imports_ and imports_in_progress_. Do not hold when
  // actually executing imports.
  base::Lock imports_lock_;

  // Owning pointers to the scopes.
  typedef std::map<SourceFile, std::unique_ptr<ImportInfo>> ImportMap;
  ImportMap imports_;

  std::unordered_set<std::string> imports_in_progress_;

  DISALLOW_COPY_AND_ASSIGN(ImportManager);
};

#endif  // TOOLS_GN_IMPORT_MANAGER_H_
