Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1796)

Unified Diff: Source/platform/TracedValue.h

Issue 381653002: Non-template base classes for TracedArray and TracedDictionary. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/TracedValue.h
diff --git a/Source/platform/TracedValue.h b/Source/platform/TracedValue.h
index 7f751054ea92aa7eb122d661a48432df1af53eb5..b80f0337e4ad85a3e268d715785babbe381339a5 100644
--- a/Source/platform/TracedValue.h
+++ b/Source/platform/TracedValue.h
@@ -14,6 +14,7 @@ namespace WebCore {
class JSONArray;
class JSONObject;
class JSONValue;
+class TracedArrayBase;
template<class T> class TracedArray;
class PLATFORM_EXPORT TracedValueBase {
@@ -44,45 +45,88 @@ protected:
Vector<RefPtr<JSONValue> > m_stack;
};
+class TracedDictionaryBase : public TracedValueBase {
+ WTF_MAKE_NONCOPYABLE(TracedDictionaryBase);
+public:
+ void endDictionary()
+ {
+ endCurrentDictionary();
+ }
+
+ TracedDictionaryBase& beginDictionary(const char* name)
+ {
+ beginDictionaryNamed(name);
+ return *this;
+ }
+ TracedArrayBase& beginArray(const char* name)
+ {
+ beginArrayNamed(name);
+ return *reinterpret_cast<TracedArrayBase*>(this);
+ }
+ TracedDictionaryBase& setInteger(const char* name, int value)
+ {
+ TracedValueBase::setInteger(name, value);
+ return *this;
+ }
+ TracedDictionaryBase& setDouble(const char* name, double value)
+ {
+ TracedValueBase::setDouble(name, value);
+ return *this;
+ }
+ TracedDictionaryBase& setBoolean(const char* name, bool value)
+ {
+ TracedValueBase::setBoolean(name, value);
+ return *this;
+ }
+ TracedDictionaryBase& setString(const char* name, const String& value)
+ {
+ TracedValueBase::setString(name, value);
+ return *this;
+ }
+private:
+ TracedDictionaryBase();
+ ~TracedDictionaryBase();
+};
+
template <class OwnerType>
-class TracedDictionary : public TracedValueBase {
+class TracedDictionary : public TracedDictionaryBase {
WTF_MAKE_NONCOPYABLE(TracedDictionary);
public:
OwnerType& endDictionary()
{
ASSERT(m_stack.size() == nestingLevel);
- endCurrentDictionary();
+ TracedDictionaryBase::endDictionary();
return *reinterpret_cast<OwnerType*>(this);
}
TracedDictionary<TracedDictionary<OwnerType> >& beginDictionary(const char* name)
{
- beginDictionaryNamed(name);
+ TracedDictionaryBase::beginDictionary(name);
return *reinterpret_cast<TracedDictionary<TracedDictionary<OwnerType> >* >(this);
}
TracedArray<TracedDictionary<OwnerType> >& beginArray(const char* name)
{
- beginArrayNamed(name);
+ TracedDictionaryBase::beginArray(name);
return *reinterpret_cast<TracedArray<TracedDictionary<OwnerType> >* >(this);
}
TracedDictionary<OwnerType>& setInteger(const char* name, int value)
{
- TracedValueBase::setInteger(name, value);
+ TracedDictionaryBase::setInteger(name, value);
return *this;
}
TracedDictionary<OwnerType>& setDouble(const char* name, double value)
{
- TracedValueBase::setDouble(name, value);
+ TracedDictionaryBase::setDouble(name, value);
return *this;
}
TracedDictionary<OwnerType>& setBoolean(const char* name, bool value)
{
- TracedValueBase::setBoolean(name, value);
+ TracedDictionaryBase::setBoolean(name, value);
return *this;
}
TracedDictionary<OwnerType>& setString(const char* name, const String& value)
{
- TracedValueBase::setString(name, value);
+ TracedDictionaryBase::setString(name, value);
return *this;
}
@@ -93,45 +137,89 @@ private:
~TracedDictionary();
};
+class TracedArrayBase : public TracedValueBase {
+ WTF_MAKE_NONCOPYABLE(TracedArrayBase);
+public:
+ TracedDictionaryBase& beginDictionary()
alph 2014/07/10 14:45:22 You could return TracedDictionary<TracedArrayBase>
yurys 2014/07/10 15:14:07 Sounds good to me too. It would help to resolve th
+ {
+ pushDictionary();
+ return *reinterpret_cast<TracedDictionaryBase*>(this);
+ }
+ TracedArrayBase& beginArray()
+ {
+ pushArray();
+ return *this;
+ }
+ void endArray()
+ {
+ endCurrentArray();
+ }
+
+ TracedArrayBase& pushInteger(int value)
+ {
+ TracedValueBase::pushInteger(value);
+ return *this;
+ }
+ TracedArrayBase& pushDouble(double value)
+ {
+ TracedValueBase::pushDouble(value);
+ return *this;
+ }
+ TracedArrayBase& pushBoolean(bool value)
+ {
+ TracedValueBase::pushBoolean(value);
+ return *this;
+ }
+ TracedArrayBase& pushString(const String& value)
+ {
+ TracedValueBase::pushString(value);
+ return *this;
+ }
+
+private:
+ TracedArrayBase();
+ ~TracedArrayBase();
+};
+
template <class OwnerType>
-class TracedArray : public TracedValueBase {
+class TracedArray : public TracedArrayBase {
WTF_MAKE_NONCOPYABLE(TracedArray);
public:
TracedDictionary<TracedArray<OwnerType> >& beginDictionary()
{
- pushDictionary();
+ TracedArrayBase::beginDictionary();
return *reinterpret_cast<TracedDictionary<TracedArray<OwnerType> >* >(this);
}
- TracedDictionary<TracedArray<OwnerType> >& beginArray()
+ TracedArray<TracedArray<OwnerType> >& beginArray()
{
- pushArray();
- return *reinterpret_cast<TracedDictionary<TracedArray<OwnerType> >* >(this);
+ TracedArrayBase::beginArray();
+ return *reinterpret_cast<TracedArray<TracedArray<OwnerType> >* >(this);
}
OwnerType& endArray()
{
ASSERT(m_stack.size() == nestingLevel);
- endCurrentArray();
+ TracedArrayBase::endArray();
return *reinterpret_cast<OwnerType*>(this);
}
TracedArray<OwnerType>& pushInteger(int value)
{
- TracedValueBase::pushInteger(value);
+ TracedArrayBase::pushInteger(value);
return *this;
}
TracedArray<OwnerType>& pushDouble(double value)
{
- TracedValueBase::pushDouble(value);
+ TracedArrayBase::pushDouble(value);
return *this;
}
TracedArray<OwnerType>& pushBoolean(bool value)
{
- TracedValueBase::pushBoolean(value);
+ TracedArrayBase::pushBoolean(value);
return *this;
}
TracedArray<OwnerType>& pushString(const String& value)
{
- TracedValueBase::pushString(value);
+ TracedArrayBase::pushString(value);
return *this;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698