diff -r 000000000000 -r 6474c204b198 tools/profiler/JSStreamWriter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/profiler/JSStreamWriter.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef JSSTREAMWRITER_H +#define JSSTREAMWRITER_H + +#include +#include +#include "nsDeque.h" + +class JSStreamWriter +{ +public: + JSStreamWriter(std::ostream& aStream); + ~JSStreamWriter(); + + void BeginObject(); + void EndObject(); + void BeginArray(); + void EndArray(); + void Name(const char *name); + void Value(int value); + void Value(double value); + void Value(const char *value, size_t valueLength); + void Value(const char *value); + template + void NameValue(const char *aName, T aValue) + { + Name(aName); + Value(aValue); + } + +private: + std::ostream& mStream; + bool mNeedsComma; + bool mNeedsName; + + nsDeque mStack; + + // This class can't be copied + JSStreamWriter(const JSStreamWriter&); + JSStreamWriter& operator=(const JSStreamWriter&); + + void* operator new(size_t); + void* operator new[](size_t); + void operator delete(void*) { + // Since JSStreamWriter has a virtual destructor the compiler + // has to provide a destructor in the object file that will call + // operate delete in case there is a derived class since its + // destructor won't know how to free this instance. + abort(); + } + void operator delete[](void*); +}; + +#endif