| Index: Source/platform/TracedValue.h
|
| diff --git a/Source/platform/TracedValue.h b/Source/platform/TracedValue.h
|
| index 7f751054ea92aa7eb122d661a48432df1af53eb5..db7cb2062a70e46070612476b82ea9b56ff8d91a 100644
|
| --- a/Source/platform/TracedValue.h
|
| +++ b/Source/platform/TracedValue.h
|
| @@ -14,7 +14,9 @@ namespace WebCore {
|
| class JSONArray;
|
| class JSONObject;
|
| class JSONValue;
|
| +class TracedArrayBase;
|
| template<class T> class TracedArray;
|
| +template<class T> class TracedDictionary;
|
|
|
| class PLATFORM_EXPORT TracedValueBase {
|
| WTF_MAKE_NONCOPYABLE(TracedValueBase);
|
| @@ -44,98 +46,179 @@ protected:
|
| Vector<RefPtr<JSONValue> > m_stack;
|
| };
|
|
|
| -template <class OwnerType>
|
| -class TracedDictionary : public TracedValueBase {
|
| - WTF_MAKE_NONCOPYABLE(TracedDictionary);
|
| +class TracedDictionaryBase : public TracedValueBase {
|
| + WTF_MAKE_NONCOPYABLE(TracedDictionaryBase);
|
| +private:
|
| + typedef TracedDictionaryBase SelfType;
|
| public:
|
| - OwnerType& endDictionary()
|
| - {
|
| - ASSERT(m_stack.size() == nestingLevel);
|
| - endCurrentDictionary();
|
| - return *reinterpret_cast<OwnerType*>(this);
|
| - }
|
| -
|
| - TracedDictionary<TracedDictionary<OwnerType> >& beginDictionary(const char* name)
|
| + TracedDictionary<SelfType>& beginDictionary(const char* name)
|
| {
|
| beginDictionaryNamed(name);
|
| - return *reinterpret_cast<TracedDictionary<TracedDictionary<OwnerType> >* >(this);
|
| + return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
|
| }
|
| - TracedArray<TracedDictionary<OwnerType> >& beginArray(const char* name)
|
| + TracedArray<SelfType>& beginArray(const char* name)
|
| {
|
| beginArrayNamed(name);
|
| - return *reinterpret_cast<TracedArray<TracedDictionary<OwnerType> >* >(this);
|
| + return *reinterpret_cast<TracedArray<SelfType>*>(this);
|
| }
|
| - TracedDictionary<OwnerType>& setInteger(const char* name, int value)
|
| + SelfType& setInteger(const char* name, int value)
|
| {
|
| TracedValueBase::setInteger(name, value);
|
| return *this;
|
| }
|
| - TracedDictionary<OwnerType>& setDouble(const char* name, double value)
|
| + SelfType& setDouble(const char* name, double value)
|
| {
|
| TracedValueBase::setDouble(name, value);
|
| return *this;
|
| }
|
| - TracedDictionary<OwnerType>& setBoolean(const char* name, bool value)
|
| + SelfType& setBoolean(const char* name, bool value)
|
| {
|
| TracedValueBase::setBoolean(name, value);
|
| return *this;
|
| }
|
| - TracedDictionary<OwnerType>& setString(const char* name, const String& value)
|
| + SelfType& setString(const char* name, const String& value)
|
| {
|
| TracedValueBase::setString(name, value);
|
| return *this;
|
| }
|
| +private:
|
| + TracedDictionaryBase();
|
| + ~TracedDictionaryBase();
|
| +};
|
| +
|
| +template <class OwnerType>
|
| +class TracedDictionary : public TracedDictionaryBase {
|
| + WTF_MAKE_NONCOPYABLE(TracedDictionary);
|
| +private:
|
| + typedef TracedDictionary<OwnerType> SelfType;
|
| +public:
|
| + OwnerType& endDictionary()
|
| + {
|
| + TracedValueBase::endCurrentDictionary();
|
| + return *reinterpret_cast<OwnerType*>(this);
|
| + }
|
|
|
| - static const size_t nestingLevel = OwnerType::nestingLevel + 1;
|
| + TracedDictionary<SelfType>& beginDictionary(const char* name)
|
| + {
|
| + TracedDictionaryBase::beginDictionary(name);
|
| + return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
|
| + }
|
| + TracedArray<SelfType>& beginArray(const char* name)
|
| + {
|
| + TracedDictionaryBase::beginArray(name);
|
| + return *reinterpret_cast<TracedArray<SelfType>*>(this);
|
| + }
|
| + SelfType& setInteger(const char* name, int value)
|
| + {
|
| + TracedDictionaryBase::setInteger(name, value);
|
| + return *this;
|
| + }
|
| + SelfType& setDouble(const char* name, double value)
|
| + {
|
| + TracedDictionaryBase::setDouble(name, value);
|
| + return *this;
|
| + }
|
| + SelfType& setBoolean(const char* name, bool value)
|
| + {
|
| + TracedDictionaryBase::setBoolean(name, value);
|
| + return *this;
|
| + }
|
| + SelfType& setString(const char* name, const String& value)
|
| + {
|
| + TracedDictionaryBase::setString(name, value);
|
| + return *this;
|
| + }
|
|
|
| private:
|
| TracedDictionary();
|
| ~TracedDictionary();
|
| };
|
|
|
| -template <class OwnerType>
|
| -class TracedArray : public TracedValueBase {
|
| - WTF_MAKE_NONCOPYABLE(TracedArray);
|
| +class TracedArrayBase : public TracedValueBase {
|
| + WTF_MAKE_NONCOPYABLE(TracedArrayBase);
|
| +private:
|
| + typedef TracedArrayBase SelfType;
|
| public:
|
| - TracedDictionary<TracedArray<OwnerType> >& beginDictionary()
|
| + TracedDictionary<SelfType>& beginDictionary()
|
| {
|
| pushDictionary();
|
| - return *reinterpret_cast<TracedDictionary<TracedArray<OwnerType> >* >(this);
|
| + return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
|
| }
|
| - TracedDictionary<TracedArray<OwnerType> >& beginArray()
|
| + TracedArray<SelfType>& beginArray()
|
| {
|
| pushArray();
|
| - return *reinterpret_cast<TracedDictionary<TracedArray<OwnerType> >* >(this);
|
| - }
|
| - OwnerType& endArray()
|
| - {
|
| - ASSERT(m_stack.size() == nestingLevel);
|
| - endCurrentArray();
|
| - return *reinterpret_cast<OwnerType*>(this);
|
| + return *reinterpret_cast<TracedArray<SelfType>*>(this);
|
| }
|
|
|
| - TracedArray<OwnerType>& pushInteger(int value)
|
| + SelfType& pushInteger(int value)
|
| {
|
| TracedValueBase::pushInteger(value);
|
| return *this;
|
| }
|
| - TracedArray<OwnerType>& pushDouble(double value)
|
| + SelfType& pushDouble(double value)
|
| {
|
| TracedValueBase::pushDouble(value);
|
| return *this;
|
| }
|
| - TracedArray<OwnerType>& pushBoolean(bool value)
|
| + SelfType& pushBoolean(bool value)
|
| {
|
| TracedValueBase::pushBoolean(value);
|
| return *this;
|
| }
|
| - TracedArray<OwnerType>& pushString(const String& value)
|
| + SelfType& pushString(const String& value)
|
| {
|
| TracedValueBase::pushString(value);
|
| return *this;
|
| }
|
|
|
| - static const size_t nestingLevel = OwnerType::nestingLevel + 1;
|
| +private:
|
| + TracedArrayBase();
|
| + ~TracedArrayBase();
|
| +};
|
| +
|
| +template <class OwnerType>
|
| +class TracedArray : public TracedArrayBase {
|
| + WTF_MAKE_NONCOPYABLE(TracedArray);
|
| +private:
|
| + typedef TracedArray<OwnerType> SelfType;
|
| +public:
|
| + OwnerType& endArray()
|
| + {
|
| + TracedValueBase::endCurrentArray();
|
| + return *reinterpret_cast<OwnerType*>(this);
|
| + }
|
| +
|
| + TracedDictionary<SelfType >& beginDictionary()
|
| + {
|
| + TracedArrayBase::beginDictionary();
|
| + return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
|
| + }
|
| + TracedArray<SelfType >& beginArray()
|
| + {
|
| + TracedArrayBase::beginArray();
|
| + return *reinterpret_cast<TracedArray<SelfType>*>(this);
|
| + }
|
| +
|
| + SelfType& pushInteger(int value)
|
| + {
|
| + TracedArrayBase::pushInteger(value);
|
| + return *this;
|
| + }
|
| + SelfType& pushDouble(double value)
|
| + {
|
| + TracedArrayBase::pushDouble(value);
|
| + return *this;
|
| + }
|
| + SelfType& pushBoolean(bool value)
|
| + {
|
| + TracedArrayBase::pushBoolean(value);
|
| + return *this;
|
| + }
|
| + SelfType& pushString(const String& value)
|
| + {
|
| + TracedArrayBase::pushString(value);
|
| + return *this;
|
| + }
|
|
|
| private:
|
| TracedArray();
|
| @@ -144,35 +227,37 @@ private:
|
|
|
| class PLATFORM_EXPORT TracedValue : public TracedValueBase {
|
| WTF_MAKE_NONCOPYABLE(TracedValue);
|
| +private:
|
| + typedef TracedValue SelfType;
|
| public:
|
| TracedValue();
|
| ~TracedValue();
|
|
|
| - TracedDictionary<TracedValue>& beginDictionary(const char* name);
|
| - TracedArray<TracedValue>& beginArray(const char* name);
|
| - TracedValue& setInteger(const char* name, int value)
|
| + TracedDictionary<SelfType>& beginDictionary(const char* name);
|
| + TracedArray<SelfType>& beginArray(const char* name);
|
| +
|
| + SelfType& setInteger(const char* name, int value)
|
| {
|
| TracedValueBase::setInteger(name, value);
|
| return *this;
|
| }
|
| - TracedValue& setDouble(const char* name, double value)
|
| + SelfType& setDouble(const char* name, double value)
|
| {
|
| TracedValueBase::setDouble(name, value);
|
| return *this;
|
| }
|
| - TracedValue& setBoolean(const char* name, bool value)
|
| + SelfType& setBoolean(const char* name, bool value)
|
| {
|
| TracedValueBase::setBoolean(name, value);
|
| return *this;
|
| }
|
| - TracedValue& setString(const char* name, const String& value)
|
| + SelfType& setString(const char* name, const String& value)
|
| {
|
| TracedValueBase::setString(name, value);
|
| return *this;
|
| }
|
| - PassRefPtr<TraceEvent::ConvertableToTraceFormat> finish();
|
|
|
| - static const size_t nestingLevel = 1;
|
| + PassRefPtr<TraceEvent::ConvertableToTraceFormat> finish();
|
| };
|
|
|
| } // namespace WebCore
|
|
|