Revert a mysterious and inexplicable part of http://trac.webkit.org/changeset/160685
authortimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 17 Dec 2013 02:56:02 +0000 (02:56 +0000)
committertimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 17 Dec 2013 02:56:02 +0000 (02:56 +0000)
* platform/KeyedCoding.h:
(WebCore::KeyedEncoder::encodeEnum):
(WebCore::KeyedEncoder::encodeObject):
(WebCore::KeyedEncoder::encodeConditionalObject):
(WebCore::KeyedEncoder::encodeObjects):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@160690 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/KeyedCoding.h

index fc0b50e4763eadbd11aa6736c46eab78cfd079d4..fefc6483b8631b897ed4cec507fcd903c2186ed4 100644 (file)
@@ -1,3 +1,13 @@
+2013-12-16  Tim Horton  <timothy_horton@apple.com>
+
+        Revert a mysterious and inexplicable part of http://trac.webkit.org/changeset/160685
+
+        * platform/KeyedCoding.h:
+        (WebCore::KeyedEncoder::encodeEnum):
+        (WebCore::KeyedEncoder::encodeObject):
+        (WebCore::KeyedEncoder::encodeConditionalObject):
+        (WebCore::KeyedEncoder::encodeObjects):
+
 2013-12-16  Anders Carlsson  <andersca@apple.com>
 
         Remove EnumClass.h from WTF
 2013-12-16  Anders Carlsson  <andersca@apple.com>
 
         Remove EnumClass.h from WTF
index c7da9cc455ce79bd3eab95f6db8760a60d30bf85..2d6f4d9c4c5fbe2463bc7b9a5a45c170a0cffd1c 100644 (file)
@@ -35,7 +35,63 @@ protected:
     virtual ~KeyedEncoder() { }
 
 public:
     virtual ~KeyedEncoder() { }
 
 public:
+    virtual void encodeBytes(const String& key, const uint8_t*, size_t) = 0;
+    virtual void encodeBool(const String& key, bool) = 0;
     virtual void encodeUInt32(const String& key, uint32_t) = 0;
     virtual void encodeUInt32(const String& key, uint32_t) = 0;
+    virtual void encodeInt32(const String& key, int32_t) = 0;
+    virtual void encodeInt64(const String& key, int64_t) = 0;
+    virtual void encodeFloat(const String& key, float) = 0;
+    virtual void encodeDouble(const String& key, double) = 0;
+    virtual void encodeString(const String& key, const String&) = 0;
+
+    template<typename T>
+    void encodeEnum(const String& key, T value)
+    {
+        static_assert(std::is_enum<T>::value, "T must be an enum type");
+
+        encodeInt64(key, static_cast<int64_t>(value));
+    }
+
+    template<typename T, typename F>
+    void encodeObject(const String& key, const T& object, F&& function)
+    {
+        beginObject(key);
+        function(*this, object);
+        endObject();
+    }
+
+    template<typename T, typename F>
+    void encodeConditionalObject(const String& key, const T* object, F&& function)
+    {
+        if (!object)
+            return;
+
+        encodeObject(key, *object, std::forward<F>(function));
+    }
+
+    template<typename T, typename F>
+    void encodeObjects(const String& key, T begin, T end, F&& function)
+    {
+        if (begin == end)
+            return;
+
+        beginArray(key);
+        for (T it = begin; it != end; ++it) {
+            beginArrayElement();
+            function(*this, *it);
+            endArrayElement();
+        }
+        endArray();
+    }
+
+private:
+    virtual void beginObject(const String& key) = 0;
+    virtual void endObject() = 0;
+
+    virtual void beginArray(const String& key) = 0;
+    virtual void beginArrayElement() = 0;
+    virtual void endArrayElement() = 0;
+    virtual void endArray() = 0;
 };
 
 } // namespace WebCore
 };
 
 } // namespace WebCore