C++程序  |  60行  |  1.44 KB

// Copyright 2014 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 BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
#define BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_

#include <string>
#include <vector>

#include "base/debug/trace_event.h"
#include "base/memory/scoped_ptr.h"

namespace base {
class DictionaryValue;
class ListValue;
class Value;

namespace debug {

class BASE_EXPORT TracedValue : public ConvertableToTraceFormat {
 public:
  TracedValue();

  void EndDictionary();
  void EndArray();

  void SetInteger(const char* name, int value);
  void SetDouble(const char* name, double);
  void SetBoolean(const char* name, bool value);
  void SetString(const char* name, const std::string& value);
  void SetValue(const char* name, Value* value);
  void BeginDictionary(const char* name);
  void BeginArray(const char* name);

  void AppendInteger(int);
  void AppendDouble(double);
  void AppendBoolean(bool);
  void AppendString(const std::string&);
  void BeginArray();
  void BeginDictionary();

  virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE;

 private:
  virtual ~TracedValue();

  DictionaryValue* GetCurrentDictionary();
  ListValue* GetCurrentArray();

  scoped_ptr<base::Value> root_;
  std::vector<Value*> stack_;
  DISALLOW_COPY_AND_ASSIGN(TracedValue);
};

}  // namespace debug
}  // namespace base

#endif  // BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_