| 119 | } |
| 120 | |
| 121 | af_err af_get_device_ptr(void **data, const af_array arr) { |
| 122 | try { |
| 123 | af_dtype type = getInfo(arr).getType(); |
| 124 | |
| 125 | switch (type) { |
| 126 | // FIXME: Perform copy if memory not continuous |
| 127 | case f32: *data = getDevicePtr(getArray<float>(arr)); break; |
| 128 | case f64: *data = getDevicePtr(getArray<double>(arr)); break; |
| 129 | case c32: *data = getDevicePtr(getArray<cfloat>(arr)); break; |
| 130 | case c64: *data = getDevicePtr(getArray<cdouble>(arr)); break; |
| 131 | case s32: *data = getDevicePtr(getArray<int>(arr)); break; |
| 132 | case u32: *data = getDevicePtr(getArray<uint>(arr)); break; |
| 133 | case s64: *data = getDevicePtr(getArray<intl>(arr)); break; |
| 134 | case u64: *data = getDevicePtr(getArray<uintl>(arr)); break; |
| 135 | case s16: *data = getDevicePtr(getArray<short>(arr)); break; |
| 136 | case u16: *data = getDevicePtr(getArray<ushort>(arr)); break; |
| 137 | case s8: *data = getDevicePtr(getArray<schar>(arr)); break; |
| 138 | case u8: *data = getDevicePtr(getArray<uchar>(arr)); break; |
| 139 | case b8: *data = getDevicePtr(getArray<char>(arr)); break; |
| 140 | case f16: *data = getDevicePtr(getArray<half>(arr)); break; |
| 141 | |
| 142 | default: TYPE_ERROR(4, type); |
| 143 | } |
| 144 | } |
| 145 | CATCHALL; |
| 146 | |
| 147 | return AF_SUCCESS; |
| 148 | } |
| 149 | |
| 150 | template<typename T> |
| 151 | inline void lockArray(const af_array arr) { |
no test coverage detected