OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2010 Apple Inc. All rights reserved. |
3 * Copyright (c) 2010, Google Inc. All rights reserved. | 3 * Copyright (c) 2010, Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 } | 66 } |
67 | 67 |
68 protected: | 68 protected: |
69 TypedArrayBase(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned
length) | 69 TypedArrayBase(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned
length) |
70 : ArrayBufferView(buffer, byteOffset) | 70 : ArrayBufferView(buffer, byteOffset) |
71 , m_length(length) | 71 , m_length(length) |
72 { | 72 { |
73 } | 73 } |
74 | 74 |
75 template <class Subclass> | 75 template <class Subclass> |
76 static PassRefPtr<Subclass> create(unsigned length) | 76 static PassRefPtr<Subclass> createOrNull(unsigned length) |
77 { | 77 { |
78 RefPtr<ArrayBuffer> buffer = ArrayBuffer::create(length, sizeof(T)); | 78 RefPtr<ArrayBuffer> buffer = ArrayBuffer::createOrNull(length, sizeof(T)
); |
| 79 if (!buffer) |
| 80 return nullptr; |
79 return create<Subclass>(buffer.release(), 0, length); | 81 return create<Subclass>(buffer.release(), 0, length); |
80 } | 82 } |
81 | 83 |
82 template <class Subclass> | 84 template <class Subclass> |
83 static PassRefPtr<Subclass> create(const T* array, unsigned length) | 85 static PassRefPtr<Subclass> createOrNull(const T* array, unsigned length) |
84 { | 86 { |
85 RefPtr<Subclass> a = create<Subclass>(length); | 87 RefPtr<Subclass> a = createOrNull<Subclass>(length); |
86 if (a) | 88 if (a) |
87 for (unsigned i = 0; i < length; ++i) | 89 for (unsigned i = 0; i < length; ++i) |
88 a->set(i, array[i]); | 90 a->set(i, array[i]); |
89 return a; | 91 return a; |
90 } | 92 } |
91 | 93 |
92 template <class Subclass> | 94 template <class Subclass> |
| 95 static PassRefPtr<Subclass> deprecatedCreateOrCrash(unsigned length) |
| 96 { |
| 97 RefPtr<ArrayBuffer> buffer = ArrayBuffer::deprecatedCreateOrCrash(length
, sizeof(T)); |
| 98 if (!buffer) |
| 99 return nullptr; |
| 100 return create<Subclass>(buffer.release(), 0, length); |
| 101 } |
| 102 |
| 103 template <class Subclass> |
| 104 static PassRefPtr<Subclass> deprecatedCreateOrCrash(const T* array, unsigned
length) |
| 105 { |
| 106 RefPtr<Subclass> a = deprecatedCreateOrCrash<Subclass>(length); |
| 107 if (a) |
| 108 for (unsigned i = 0; i < length; ++i) |
| 109 a->set(i, array[i]); |
| 110 return a; |
| 111 } |
| 112 |
| 113 template <class Subclass> |
93 static PassRefPtr<Subclass> create(PassRefPtr<ArrayBuffer> buffer, unsigned
byteOffset, unsigned length) | 114 static PassRefPtr<Subclass> create(PassRefPtr<ArrayBuffer> buffer, unsigned
byteOffset, unsigned length) |
94 { | 115 { |
95 RefPtr<ArrayBuffer> buf(buffer); | 116 RefPtr<ArrayBuffer> buf(buffer); |
96 RELEASE_ASSERT(verifySubRange<T>(buf, byteOffset, length)); | 117 RELEASE_ASSERT(verifySubRange<T>(buf, byteOffset, length)); |
97 return adoptRef(new Subclass(buf.release(), byteOffset, length)); | 118 return adoptRef(new Subclass(buf.release(), byteOffset, length)); |
98 } | 119 } |
99 | 120 |
100 template <class Subclass> | |
101 static PassRefPtr<Subclass> createOrNull(unsigned length) | |
102 { | |
103 RefPtr<ArrayBuffer> buffer = ArrayBuffer::createOrNull(length, sizeof(T)
); | |
104 if (!buffer) | |
105 return nullptr; | |
106 return create<Subclass>(buffer.release(), 0, length); | |
107 } | |
108 | |
109 void neuter() final | 121 void neuter() final |
110 { | 122 { |
111 ArrayBufferView::neuter(); | 123 ArrayBufferView::neuter(); |
112 m_length = 0; | 124 m_length = 0; |
113 } | 125 } |
114 | 126 |
115 // We do not want to have to access this via a virtual function in subclasse
s, | 127 // We do not want to have to access this via a virtual function in subclasse
s, |
116 // which is why it is protected rather than private. | 128 // which is why it is protected rather than private. |
117 unsigned m_length; | 129 unsigned m_length; |
118 }; | 130 }; |
119 | 131 |
120 } // namespace WTF | 132 } // namespace WTF |
121 | 133 |
122 using WTF::TypedArrayBase; | 134 using WTF::TypedArrayBase; |
123 | 135 |
124 #endif // TypedArrayBase_h | 136 #endif // TypedArrayBase_h |
OLD | NEW |