2010-09-09 Chris Rogers <crogers@google.com>
authorcrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Sep 2010 22:22:17 +0000 (22:22 +0000)
committercrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Sep 2010 22:22:17 +0000 (22:22 +0000)
        Reviewed by Kenneth Russell.

        Add setRange() and zeroRange() methods to TypedArrayBase
        https://bugs.webkit.org/show_bug.cgi?id=45419

        No new tests since adding new methods which are not yet called anywhere.

        * html/canvas/ArrayBufferView.cpp:
        (WebCore::ArrayBufferView::setRangeImpl):
        (WebCore::ArrayBufferView::zeroRangeImpl):
        * html/canvas/ArrayBufferView.h:
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::setRange):
        (WebCore::TypedArrayBase::zeroRange):

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

WebCore/ChangeLog
WebCore/html/canvas/ArrayBufferView.cpp
WebCore/html/canvas/ArrayBufferView.h
WebCore/html/canvas/TypedArrayBase.h

index f3696b40e33d9e21696888629f7be8cfa676614c..a56195289ba2c38284e40e43406492a7e7424601 100644 (file)
@@ -1,3 +1,20 @@
+2010-09-09  Chris Rogers  <crogers@google.com>
+
+        Reviewed by Kenneth Russell.
+
+        Add setRange() and zeroRange() methods to TypedArrayBase
+        https://bugs.webkit.org/show_bug.cgi?id=45419
+
+        No new tests since adding new methods which are not yet called anywhere.
+
+        * html/canvas/ArrayBufferView.cpp:
+        (WebCore::ArrayBufferView::setRangeImpl):
+        (WebCore::ArrayBufferView::zeroRangeImpl):
+        * html/canvas/ArrayBufferView.h:
+        * html/canvas/TypedArrayBase.h:
+        (WebCore::TypedArrayBase::setRange):
+        (WebCore::TypedArrayBase::zeroRange):
+
 2010-09-09  Robert Hogan  <robert@webkit.org>
 
         Reviewed by Andreas Kling.
index bd22f885c43d5f033f9aeb6da5b67e6e27e6437b..485d18bf2d3f6d29ffa3362c8d3fbd4d8a930f14 100644 (file)
@@ -59,6 +59,34 @@ void ArrayBufferView::setImpl(ArrayBufferView* array, unsigned byteOffset, Excep
     memmove(base + byteOffset, array->baseAddress(), array->byteLength());
 }
 
+void ArrayBufferView::setRangeImpl(const char* data, size_t dataByteLength, unsigned byteOffset, ExceptionCode& ec)
+{
+    if (byteOffset > byteLength()
+        || byteOffset + dataByteLength > byteLength()
+        || byteOffset + dataByteLength < byteOffset) {
+        // Out of range offset or overflow
+        ec = INDEX_SIZE_ERR;
+        return;
+    }
+
+    char* base = static_cast<char*>(baseAddress());
+    memmove(base + byteOffset, data, dataByteLength);
+}
+
+void ArrayBufferView::zeroRangeImpl(unsigned byteOffset, size_t rangeByteLength, ExceptionCode& ec)
+{
+    if (byteOffset > byteLength()
+        || byteOffset + rangeByteLength > byteLength()
+        || byteOffset + rangeByteLength < byteOffset) {
+        // Out of range offset or overflow
+        ec = INDEX_SIZE_ERR;
+        return;
+    }
+
+    char* base = static_cast<char*>(baseAddress());
+    memset(base + byteOffset, 0, rangeByteLength);
+}
+
 void ArrayBufferView::calculateOffsetAndLength(int start, int end, unsigned arraySize,
                                           unsigned* offset, unsigned* length)
 {
index 29ad691119057410609723fbce5fd1bd50399f10..ee685b125f2cffb42c84a8de89e7c3c9f5868e60 100644 (file)
@@ -73,6 +73,10 @@ class ArrayBufferView : public RefCounted<ArrayBufferView> {
 
     void setImpl(ArrayBufferView* array, unsigned byteOffset, ExceptionCode& ec);
 
+    void setRangeImpl(const char* data, size_t dataByteLength, unsigned byteOffset, ExceptionCode& ec);
+
+    void zeroRangeImpl(unsigned byteOffset, size_t rangeByteLength, ExceptionCode& ec);
+
     static void calculateOffsetAndLength(int start, int end, unsigned arraySize,
                                          unsigned* offset, unsigned* length);
 
index e69c2b550032256e784e8fe2815d81b99009032a..77283dfe770f9059e1a54583558e1face627b6ff 100644 (file)
@@ -42,6 +42,16 @@ class TypedArrayBase : public ArrayBufferView {
         setImpl(array, offset * sizeof(T), ec);
     }
 
+    void setRange(const T* data, size_t dataLength, unsigned offset, ExceptionCode& ec)
+    {
+        setRangeImpl(reinterpret_cast<const char*>(data), dataLength * sizeof(T), offset * sizeof(T), ec);
+    }
+
+    void zeroRange(unsigned offset, size_t length, ExceptionCode& ec)
+    {
+        zeroRangeImpl(offset * sizeof(T), length * sizeof(T), ec);
+    }
+
     // Overridden from ArrayBufferView. This must be public because of
     // rules about inheritance of members in template classes, and
     // because it is accessed via pointers to subclasses.