OLD | NEW |
1 /* | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 // Use of this source code is governed by a BSD-style license that can be |
3 * Copyright (C) 2009 Google Inc. All rights reserved. | 3 // found in the LICENSE file. |
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 | 4 |
28 #ifndef Uint8ClampedArray_h | 5 #include "platform/wtf/typed_arrays/Uint8ClampedArray.h" |
29 #define Uint8ClampedArray_h | |
30 | 6 |
31 #include "wtf/MathExtras.h" | 7 // The contents of this header was moved to platform/wtf as part of |
32 #include "wtf/typed_arrays/Uint8Array.h" | 8 // WTF migration project. See the following post for details: |
33 | 9 // https://groups.google.com/a/chromium.org/d/msg/blink-dev/tLdAZCTlcAA/bYXVT8gY
CAAJ |
34 namespace WTF { | |
35 | |
36 class Uint8ClampedArray final : public Uint8Array { | |
37 public: | |
38 static inline PassRefPtr<Uint8ClampedArray> create(unsigned length); | |
39 static inline PassRefPtr<Uint8ClampedArray> create(const unsigned char* array, | |
40 unsigned length); | |
41 static inline PassRefPtr<Uint8ClampedArray> create(PassRefPtr<ArrayBuffer>, | |
42 unsigned byteOffset, | |
43 unsigned length); | |
44 | |
45 using TypedArrayBase<unsigned char>::set; | |
46 inline void set(unsigned index, double value); | |
47 | |
48 ViewType type() const override { return TypeUint8Clamped; } | |
49 | |
50 private: | |
51 inline Uint8ClampedArray(PassRefPtr<ArrayBuffer>, | |
52 unsigned byteOffset, | |
53 unsigned length); | |
54 // Make constructor visible to superclass. | |
55 friend class TypedArrayBase<unsigned char>; | |
56 }; | |
57 | |
58 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create(unsigned length) { | |
59 return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(length); | |
60 } | |
61 | |
62 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create( | |
63 const unsigned char* array, | |
64 unsigned length) { | |
65 return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(array, | |
66 length); | |
67 } | |
68 | |
69 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create( | |
70 PassRefPtr<ArrayBuffer> buffer, | |
71 unsigned byteOffset, | |
72 unsigned length) { | |
73 return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>( | |
74 std::move(buffer), byteOffset, length); | |
75 } | |
76 | |
77 void Uint8ClampedArray::set(unsigned index, double value) { | |
78 if (index >= m_length) | |
79 return; | |
80 if (std::isnan(value) || value < 0) | |
81 value = 0; | |
82 else if (value > 255) | |
83 value = 255; | |
84 data()[index] = static_cast<unsigned char>(lrint(value)); | |
85 } | |
86 | |
87 Uint8ClampedArray::Uint8ClampedArray(PassRefPtr<ArrayBuffer> buffer, | |
88 unsigned byteOffset, | |
89 unsigned length) | |
90 : Uint8Array(std::move(buffer), byteOffset, length) {} | |
91 | |
92 } // namespace WTF | |
93 | |
94 using WTF::Uint8ClampedArray; | |
95 | |
96 #endif // Uint8ClampedArray_h | |
OLD | NEW |