| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 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 25 matching lines...) Expand all Loading... |
| 36 template<typename T> | 36 template<typename T> |
| 37 union Value { | 37 union Value { |
| 38 T data; | 38 T data; |
| 39 char bytes[sizeof(T)]; | 39 char bytes[sizeof(T)]; |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 } | 42 } |
| 43 | 43 |
| 44 namespace blink { | 44 namespace blink { |
| 45 | 45 |
| 46 PassRefPtr<DataView> DataView::create(unsigned length) | |
| 47 { | |
| 48 RefPtr<ArrayBuffer> buffer = ArrayBuffer::create(length, sizeof(uint8_t)); | |
| 49 return create(buffer.release(), 0, length); | |
| 50 } | |
| 51 | |
| 52 PassRefPtr<DataView> DataView::create(PassRefPtr<ArrayBuffer> buffer, unsigned b
yteOffset, unsigned byteLength) | 46 PassRefPtr<DataView> DataView::create(PassRefPtr<ArrayBuffer> buffer, unsigned b
yteOffset, unsigned byteLength) |
| 53 { | 47 { |
| 54 RELEASE_ASSERT(byteOffset <= buffer->byteLength()); | 48 RELEASE_ASSERT(byteOffset <= buffer->byteLength()); |
| 55 CheckedInt<uint32_t> checkedOffset(byteOffset); | 49 CheckedInt<uint32_t> checkedOffset(byteOffset); |
| 56 CheckedInt<uint32_t> checkedLength(byteLength); | 50 CheckedInt<uint32_t> checkedLength(byteLength); |
| 57 CheckedInt<uint32_t> checkedMax = checkedOffset + checkedLength; | 51 CheckedInt<uint32_t> checkedMax = checkedOffset + checkedLength; |
| 58 RELEASE_ASSERT(checkedMax.isValid()); | 52 RELEASE_ASSERT(checkedMax.isValid()); |
| 59 RELEASE_ASSERT(checkedMax.value() <= buffer->byteLength()); | 53 RELEASE_ASSERT(checkedMax.value() <= buffer->byteLength()); |
| 60 return adoptRef(new DataView(buffer, byteOffset, byteLength)); | 54 return adoptRef(new DataView(buffer, byteOffset, byteLength)); |
| 61 } | 55 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 return; | 142 return; |
| 149 } | 143 } |
| 150 | 144 |
| 151 // We do not want to store the data directly since it would cause a bus erro
r on architectures that don't support unaligned stores. | 145 // We do not want to store the data directly since it would cause a bus erro
r on architectures that don't support unaligned stores. |
| 152 Value<T> tempValue; | 146 Value<T> tempValue; |
| 153 tempValue.data = value; | 147 tempValue.data = value; |
| 154 flipBytesIfNeeded(tempValue.bytes, sizeof(T), littleEndian); | 148 flipBytesIfNeeded(tempValue.bytes, sizeof(T), littleEndian); |
| 155 memcpy(static_cast<char*>(m_baseAddress) + byteOffset, tempValue.bytes, size
of(T)); | 149 memcpy(static_cast<char*>(m_baseAddress) + byteOffset, tempValue.bytes, size
of(T)); |
| 156 } | 150 } |
| 157 | 151 |
| 158 int8_t DataView::getInt8(unsigned byteOffset, ExceptionState& exceptionState) | |
| 159 { | |
| 160 return getData<int8_t>(byteOffset, false, exceptionState); | |
| 161 } | |
| 162 | |
| 163 uint8_t DataView::getUint8(unsigned byteOffset, ExceptionState& exceptionState) | |
| 164 { | |
| 165 return getData<uint8_t>(byteOffset, false, exceptionState); | |
| 166 } | |
| 167 | |
| 168 int16_t DataView::getInt16(unsigned byteOffset, bool littleEndian, ExceptionStat
e& exceptionState) | 152 int16_t DataView::getInt16(unsigned byteOffset, bool littleEndian, ExceptionStat
e& exceptionState) |
| 169 { | 153 { |
| 170 return getData<int16_t>(byteOffset, littleEndian, exceptionState); | 154 return getData<int16_t>(byteOffset, littleEndian, exceptionState); |
| 171 } | 155 } |
| 172 | 156 |
| 173 uint16_t DataView::getUint16(unsigned byteOffset, bool littleEndian, ExceptionSt
ate& exceptionState) | 157 uint16_t DataView::getUint16(unsigned byteOffset, bool littleEndian, ExceptionSt
ate& exceptionState) |
| 174 { | 158 { |
| 175 return getData<uint16_t>(byteOffset, littleEndian, exceptionState); | 159 return getData<uint16_t>(byteOffset, littleEndian, exceptionState); |
| 176 } | 160 } |
| 177 | 161 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 188 float DataView::getFloat32(unsigned byteOffset, bool littleEndian, ExceptionStat
e& exceptionState) | 172 float DataView::getFloat32(unsigned byteOffset, bool littleEndian, ExceptionStat
e& exceptionState) |
| 189 { | 173 { |
| 190 return getData<float>(byteOffset, littleEndian, exceptionState); | 174 return getData<float>(byteOffset, littleEndian, exceptionState); |
| 191 } | 175 } |
| 192 | 176 |
| 193 double DataView::getFloat64(unsigned byteOffset, bool littleEndian, ExceptionSta
te& exceptionState) | 177 double DataView::getFloat64(unsigned byteOffset, bool littleEndian, ExceptionSta
te& exceptionState) |
| 194 { | 178 { |
| 195 return getData<double>(byteOffset, littleEndian, exceptionState); | 179 return getData<double>(byteOffset, littleEndian, exceptionState); |
| 196 } | 180 } |
| 197 | 181 |
| 198 void DataView::setInt8(unsigned byteOffset, int8_t value, ExceptionState& except
ionState) | |
| 199 { | |
| 200 setData<int8_t>(byteOffset, value, false, exceptionState); | |
| 201 } | |
| 202 | |
| 203 void DataView::setUint8(unsigned byteOffset, uint8_t value, ExceptionState& exce
ptionState) | |
| 204 { | |
| 205 setData<uint8_t>(byteOffset, value, false, exceptionState); | |
| 206 } | |
| 207 | |
| 208 void DataView::setInt16(unsigned byteOffset, short value, bool littleEndian, Exc
eptionState& exceptionState) | 182 void DataView::setInt16(unsigned byteOffset, short value, bool littleEndian, Exc
eptionState& exceptionState) |
| 209 { | 183 { |
| 210 setData<int16_t>(byteOffset, value, littleEndian, exceptionState); | 184 setData<int16_t>(byteOffset, value, littleEndian, exceptionState); |
| 211 } | 185 } |
| 212 | 186 |
| 213 void DataView::setUint16(unsigned byteOffset, uint16_t value, bool littleEndian,
ExceptionState& exceptionState) | 187 void DataView::setUint16(unsigned byteOffset, uint16_t value, bool littleEndian,
ExceptionState& exceptionState) |
| 214 { | 188 { |
| 215 setData<uint16_t>(byteOffset, value, littleEndian, exceptionState); | 189 setData<uint16_t>(byteOffset, value, littleEndian, exceptionState); |
| 216 } | 190 } |
| 217 | 191 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 235 setData<double>(byteOffset, value, littleEndian, exceptionState); | 209 setData<double>(byteOffset, value, littleEndian, exceptionState); |
| 236 } | 210 } |
| 237 | 211 |
| 238 void DataView::neuter() | 212 void DataView::neuter() |
| 239 { | 213 { |
| 240 ArrayBufferView::neuter(); | 214 ArrayBufferView::neuter(); |
| 241 m_byteLength = 0; | 215 m_byteLength = 0; |
| 242 } | 216 } |
| 243 | 217 |
| 244 } // namespace blink | 218 } // namespace blink |
| OLD | NEW |