#ifndef GN_GRAPH_INCLUDE_GRAPH_H_
#define GN_GRAPH_INCLUDE_GRAPH_H_
#include <vector>
#include "base/files/file_path.h"
#include "base/values.h"
#include "gn/item.h"
#include "gn/label_ptr.h"
#include "gn/target.h"
#include "gn/unique_vector.h"
#include "gn/graph/include/module.h"
class Graph {
public:
static void Init(const std::string& out_dir) {
if (instance_ != nullptr) {
return;
}
instance_ = new Graph(out_dir);
}
static Graph* GetInstance() {
return instance_;
}
void GenGraph(const std::vector<const Item*> items);
private:
class JsonNodeBuilder {
public:
explicit JsonNodeBuilder(const Module& info);
base::Value BuildModules();
private:
const Module& info_;
};
static Graph* instance_;
std::string out_dir_;
void DumpGraphToJsonFile(const std::vector<Module>& modules,
const base::FilePath& output_path);
Graph() {}
Graph(const std::string& out_dir) { out_dir_ = out_dir; }
Graph &operator = (const Graph &) = delete;
};
#endif