Home | History | Annotate | Download | only in blink_gc_plugin
      1 // Copyright 2014 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_BLINK_GC_PLUGIN_JSON_WRITER_H_
      6 #define TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_
      7 
      8 #include "llvm/Support/raw_ostream.h"
      9 
     10 // Helper to write information for the points-to graph.
     11 class JsonWriter {
     12  public:
     13   static JsonWriter* from(std::unique_ptr<llvm::raw_ostream> os) {
     14     return os ? new JsonWriter(std::move(os)) : 0;
     15   }
     16   void OpenList() {
     17     Separator();
     18     *os_ << "[";
     19     state_.push(false);
     20   }
     21   void OpenList(const std::string& key) {
     22     Write(key);
     23     *os_ << ":";
     24     OpenList();
     25   }
     26   void CloseList() {
     27     *os_ << "]";
     28     state_.pop();
     29   }
     30   void OpenObject() {
     31     Separator();
     32     *os_ << "{";
     33     state_.push(false);
     34   }
     35   void CloseObject() {
     36     *os_ << "}\n";
     37     state_.pop();
     38   }
     39   void Write(const size_t val) {
     40     Separator();
     41     *os_ << val;
     42   }
     43   void Write(const std::string& val) {
     44     Separator();
     45     *os_ << "\"" << val << "\"";
     46   }
     47   void Write(const std::string& key, const size_t val) {
     48     Separator();
     49     *os_ << "\"" << key << "\":" << val;
     50   }
     51   void Write(const std::string& key, const std::string& val) {
     52     Separator();
     53     *os_ << "\"" << key << "\":\"" << val << "\"";
     54   }
     55  private:
     56   JsonWriter(std::unique_ptr<llvm::raw_ostream> os) : os_(std::move(os)) {}
     57   void Separator() {
     58     if (state_.empty())
     59       return;
     60     if (state_.top()) {
     61       *os_ << ",";
     62       return;
     63     }
     64     state_.top() = true;
     65   }
     66   std::unique_ptr<llvm::raw_ostream> os_;
     67   std::stack<bool> state_;
     68 };
     69 
     70 #endif // TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_
     71