Merge "Fix build break by removing TIZEN_RECORDING_SURFACE_SET" into tizen_2.1
[framework/web/webkit-efl.git] / Source / WTF / wtf / Uint8ClampedArray.h
1 /*
2  * Copyright (C) 2009 Apple Inc. All rights reserved.
3  * Copyright (C) 2009 Google Inc. All rights reserved.
4  * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #ifndef Uint8ClampedArray_h
29 #define Uint8ClampedArray_h
30
31 #include <wtf/Platform.h>
32
33 #include <wtf/Uint8Array.h>
34 #include <wtf/MathExtras.h>
35
36 namespace WTF {
37
38 class Uint8ClampedArray : public Uint8Array {
39 public:
40     static inline PassRefPtr<Uint8ClampedArray> create(unsigned length);
41     static inline PassRefPtr<Uint8ClampedArray> create(const unsigned char* array, unsigned length);
42     static inline PassRefPtr<Uint8ClampedArray> create(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsigned length);
43
44     // Should only be used when it is known the entire array will be filled. Do
45     // not return these results directly to JavaScript without filling first.
46     static inline PassRefPtr<Uint8ClampedArray> createUninitialized(unsigned length);
47
48     // It's only needed to potentially call this method if the array
49     // was created uninitialized -- the default initialization paths
50     // zero the allocated memory.
51     inline void zeroFill();
52
53     // Can’t use "using" here due to a bug in the RVCT compiler.
54     bool set(TypedArrayBase<unsigned char>* array, unsigned offset) { return TypedArrayBase<unsigned char>::set(array, offset); }
55     inline void set(unsigned index, double value);
56
57     inline PassRefPtr<Uint8ClampedArray> subarray(int start) const;
58     inline PassRefPtr<Uint8ClampedArray> subarray(int start, int end) const;
59
60     virtual ViewType getType() const
61     {
62         return TypeUint8Clamped;
63     }
64
65 private:
66     inline Uint8ClampedArray(PassRefPtr<ArrayBuffer>,
67                              unsigned byteOffset,
68                              unsigned length);
69     // Make constructor visible to superclass.
70     friend class TypedArrayBase<unsigned char>;
71 };
72
73 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create(unsigned length)
74 {
75     return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(length);
76 }
77
78 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create(const unsigned char* array, unsigned length)
79 {
80     return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(array, length);
81 }
82
83 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length)
84 {
85     return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(buffer, byteOffset, length);
86 }
87
88 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::createUninitialized(unsigned length)
89 {
90     return TypedArrayBase<unsigned char>::createUninitialized<Uint8ClampedArray>(length);
91 }
92
93 void Uint8ClampedArray::zeroFill()
94 {
95     zeroRange(0, length());
96 }
97
98 void Uint8ClampedArray::set(unsigned index, double value)
99 {
100     if (index >= m_length)
101         return;
102     if (isnan(value) || value < 0)
103         value = 0;
104     else if (value > 255)
105         value = 255;
106     data()[index] = static_cast<unsigned char>(lrint(value));
107 }
108
109 Uint8ClampedArray::Uint8ClampedArray(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length)
110 : Uint8Array(buffer, byteOffset, length)
111 {
112 }
113
114 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::subarray(int start) const
115 {
116     return subarray(start, length());
117 }
118
119 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::subarray(int start, int end) const
120 {
121     return subarrayImpl<Uint8ClampedArray>(start, end);
122 }
123
124 } // namespace WTF
125
126 using WTF::Uint8ClampedArray;
127
128 #endif // Uint8ClampedArray_h