Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: base/android/jni_array.cc

Issue 2877703006: Add functions to convert boolean jni array. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/android/jni_array.h ('k') | base/android/jni_array_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/android/jni_array.h" 5 #include "base/android/jni_array.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 10
(...skipping 27 matching lines...) Expand all
38 38
39 return ScopedJavaLocalRef<jbyteArray>(env, byte_array); 39 return ScopedJavaLocalRef<jbyteArray>(env, byte_array);
40 } 40 }
41 41
42 ScopedJavaLocalRef<jbyteArray> ToJavaByteArray( 42 ScopedJavaLocalRef<jbyteArray> ToJavaByteArray(
43 JNIEnv* env, 43 JNIEnv* env,
44 const std::vector<uint8_t>& bytes) { 44 const std::vector<uint8_t>& bytes) {
45 return ToJavaByteArray(env, bytes.data(), bytes.size()); 45 return ToJavaByteArray(env, bytes.data(), bytes.size());
46 } 46 }
47 47
48 ScopedJavaLocalRef<jbooleanArray> ToJavaBooleanArray(JNIEnv* env,
49 const bool* bools,
50 size_t len) {
51 jbooleanArray boolean_array = env->NewBooleanArray(len);
52 CheckException(env);
53 DCHECK(boolean_array);
54
55 env->SetBooleanArrayRegion(boolean_array, 0, len,
56 reinterpret_cast<const jboolean*>(bools));
57 CheckException(env);
58
59 return ScopedJavaLocalRef<jbooleanArray>(env, boolean_array);
60 }
61
48 ScopedJavaLocalRef<jintArray> ToJavaIntArray( 62 ScopedJavaLocalRef<jintArray> ToJavaIntArray(
49 JNIEnv* env, const int* ints, size_t len) { 63 JNIEnv* env, const int* ints, size_t len) {
50 jintArray int_array = env->NewIntArray(len); 64 jintArray int_array = env->NewIntArray(len);
51 CheckException(env); 65 CheckException(env);
52 DCHECK(int_array); 66 DCHECK(int_array);
53 67
54 env->SetIntArrayRegion( 68 env->SetIntArrayRegion(
55 int_array, 0, len, reinterpret_cast<const jint*>(ints)); 69 int_array, 0, len, reinterpret_cast<const jint*>(ints));
56 CheckException(env); 70 CheckException(env);
57 71
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 std::vector<string16>* out) { 164 std::vector<string16>* out) {
151 DCHECK(out); 165 DCHECK(out);
152 if (!array) 166 if (!array)
153 return; 167 return;
154 size_t len = SafeGetArrayLength(env, array); 168 size_t len = SafeGetArrayLength(env, array);
155 size_t back = out->size(); 169 size_t back = out->size();
156 out->resize(back + len); 170 out->resize(back + len);
157 for (size_t i = 0; i < len; ++i) { 171 for (size_t i = 0; i < len; ++i) {
158 ScopedJavaLocalRef<jstring> str(env, 172 ScopedJavaLocalRef<jstring> str(env,
159 static_cast<jstring>(env->GetObjectArrayElement(array, i))); 173 static_cast<jstring>(env->GetObjectArrayElement(array, i)));
160 ConvertJavaStringToUTF16(env, str.obj(), &((*out)[back + i])); 174 ConvertJavaStringToUTF16(env, str.obj(), out->data() + back + i);
161 } 175 }
162 } 176 }
163 177
164 void AppendJavaStringArrayToStringVector(JNIEnv* env, 178 void AppendJavaStringArrayToStringVector(JNIEnv* env,
165 jobjectArray array, 179 jobjectArray array,
166 std::vector<std::string>* out) { 180 std::vector<std::string>* out) {
167 DCHECK(out); 181 DCHECK(out);
168 if (!array) 182 if (!array)
169 return; 183 return;
170 size_t len = SafeGetArrayLength(env, array); 184 size_t len = SafeGetArrayLength(env, array);
171 size_t back = out->size(); 185 size_t back = out->size();
172 out->resize(back + len); 186 out->resize(back + len);
173 for (size_t i = 0; i < len; ++i) { 187 for (size_t i = 0; i < len; ++i) {
174 ScopedJavaLocalRef<jstring> str(env, 188 ScopedJavaLocalRef<jstring> str(env,
175 static_cast<jstring>(env->GetObjectArrayElement(array, i))); 189 static_cast<jstring>(env->GetObjectArrayElement(array, i)));
176 ConvertJavaStringToUTF8(env, str.obj(), &((*out)[back + i])); 190 ConvertJavaStringToUTF8(env, str.obj(), out->data() + back + i);
177 } 191 }
178 } 192 }
179 193
180 void AppendJavaByteArrayToByteVector(JNIEnv* env, 194 void AppendJavaByteArrayToByteVector(JNIEnv* env,
181 jbyteArray byte_array, 195 jbyteArray byte_array,
182 std::vector<uint8_t>* out) { 196 std::vector<uint8_t>* out) {
183 DCHECK(out); 197 DCHECK(out);
184 if (!byte_array) 198 if (!byte_array)
185 return; 199 return;
186 size_t len = SafeGetArrayLength(env, byte_array); 200 size_t len = SafeGetArrayLength(env, byte_array);
187 if (!len) 201 if (!len)
188 return; 202 return;
189 size_t back = out->size(); 203 size_t back = out->size();
190 out->resize(back + len); 204 out->resize(back + len);
191 env->GetByteArrayRegion(byte_array, 0, len, 205 env->GetByteArrayRegion(byte_array, 0, len,
192 reinterpret_cast<int8_t*>(&(*out)[back])); 206 reinterpret_cast<int8_t*>(out->data() + back));
193 } 207 }
194 208
195 void JavaByteArrayToByteVector(JNIEnv* env, 209 void JavaByteArrayToByteVector(JNIEnv* env,
196 jbyteArray byte_array, 210 jbyteArray byte_array,
197 std::vector<uint8_t>* out) { 211 std::vector<uint8_t>* out) {
198 DCHECK(out); 212 DCHECK(out);
199 DCHECK(byte_array); 213 DCHECK(byte_array);
200 out->clear(); 214 out->clear();
201 AppendJavaByteArrayToByteVector(env, byte_array, out); 215 AppendJavaByteArrayToByteVector(env, byte_array, out);
202 } 216 }
203 217
218 void JavaBooleanArrayToBoolVector(JNIEnv* env,
219 jbooleanArray boolean_array,
220 std::vector<bool>* out) {
221 DCHECK(out);
222 if (!boolean_array)
223 return;
224 size_t len = SafeGetArrayLength(env, boolean_array);
225 if (!len)
226 return;
227 out->resize(len);
228 // It is not possible to get bool* out of vector<bool>.
229 jboolean* values = env->GetBooleanArrayElements(boolean_array, nullptr);
230 for (size_t i = 0; i < len; ++i) {
231 out->at(i) = static_cast<bool>(values[i]);
232 }
233 }
234
204 void JavaIntArrayToIntVector(JNIEnv* env, 235 void JavaIntArrayToIntVector(JNIEnv* env,
205 jintArray int_array, 236 jintArray int_array,
206 std::vector<int>* out) { 237 std::vector<int>* out) {
207 DCHECK(out); 238 DCHECK(out);
208 size_t len = SafeGetArrayLength(env, int_array); 239 size_t len = SafeGetArrayLength(env, int_array);
209 out->resize(len); 240 out->resize(len);
210 if (!len) 241 if (!len)
211 return; 242 return;
212 // TODO(jdduke): Use |out->data()| for pointer access after switch to libc++, 243 env->GetIntArrayRegion(int_array, 0, len, out->data());
213 // both here and in the other conversion routines. See crbug.com/427718.
214 env->GetIntArrayRegion(int_array, 0, len, &(*out)[0]);
215 } 244 }
216 245
217 void JavaLongArrayToInt64Vector(JNIEnv* env, 246 void JavaLongArrayToInt64Vector(JNIEnv* env,
218 jlongArray long_array, 247 jlongArray long_array,
219 std::vector<int64_t>* out) { 248 std::vector<int64_t>* out) {
220 DCHECK(out); 249 DCHECK(out);
221 std::vector<jlong> temp; 250 std::vector<jlong> temp;
222 JavaLongArrayToLongVector(env, long_array, &temp); 251 JavaLongArrayToLongVector(env, long_array, &temp);
223 out->resize(0); 252 out->resize(0);
224 out->insert(out->begin(), temp.begin(), temp.end()); 253 out->insert(out->begin(), temp.begin(), temp.end());
225 } 254 }
226 255
227 void JavaLongArrayToLongVector(JNIEnv* env, 256 void JavaLongArrayToLongVector(JNIEnv* env,
228 jlongArray long_array, 257 jlongArray long_array,
229 std::vector<jlong>* out) { 258 std::vector<jlong>* out) {
230 DCHECK(out); 259 DCHECK(out);
231 size_t len = SafeGetArrayLength(env, long_array); 260 size_t len = SafeGetArrayLength(env, long_array);
232 out->resize(len); 261 out->resize(len);
233 if (!len) 262 if (!len)
234 return; 263 return;
235 env->GetLongArrayRegion(long_array, 0, len, &(*out)[0]); 264 env->GetLongArrayRegion(long_array, 0, len, out->data());
236 } 265 }
237 266
238 void JavaFloatArrayToFloatVector(JNIEnv* env, 267 void JavaFloatArrayToFloatVector(JNIEnv* env,
239 jfloatArray float_array, 268 jfloatArray float_array,
240 std::vector<float>* out) { 269 std::vector<float>* out) {
241 DCHECK(out); 270 DCHECK(out);
242 size_t len = SafeGetArrayLength(env, float_array); 271 size_t len = SafeGetArrayLength(env, float_array);
243 out->resize(len); 272 out->resize(len);
244 if (!len) 273 if (!len)
245 return; 274 return;
246 env->GetFloatArrayRegion(float_array, 0, len, &(*out)[0]); 275 env->GetFloatArrayRegion(float_array, 0, len, out->data());
247 } 276 }
248 277
249 void JavaArrayOfByteArrayToStringVector( 278 void JavaArrayOfByteArrayToStringVector(
250 JNIEnv* env, 279 JNIEnv* env,
251 jobjectArray array, 280 jobjectArray array,
252 std::vector<std::string>* out) { 281 std::vector<std::string>* out) {
253 DCHECK(out); 282 DCHECK(out);
254 size_t len = SafeGetArrayLength(env, array); 283 size_t len = SafeGetArrayLength(env, array);
255 out->resize(len); 284 out->resize(len);
256 for (size_t i = 0; i < len; ++i) { 285 for (size_t i = 0; i < len; ++i) {
(...skipping 10 matching lines...) Expand all
267 void JavaArrayOfIntArrayToIntVector( 296 void JavaArrayOfIntArrayToIntVector(
268 JNIEnv* env, 297 JNIEnv* env,
269 jobjectArray array, 298 jobjectArray array,
270 std::vector<std::vector<int>>* out) { 299 std::vector<std::vector<int>>* out) {
271 DCHECK(out); 300 DCHECK(out);
272 size_t len = SafeGetArrayLength(env, array); 301 size_t len = SafeGetArrayLength(env, array);
273 out->resize(len); 302 out->resize(len);
274 for (size_t i = 0; i < len; ++i) { 303 for (size_t i = 0; i < len; ++i) {
275 ScopedJavaLocalRef<jintArray> int_array( 304 ScopedJavaLocalRef<jintArray> int_array(
276 env, static_cast<jintArray>(env->GetObjectArrayElement(array, i))); 305 env, static_cast<jintArray>(env->GetObjectArrayElement(array, i)));
277 JavaIntArrayToIntVector(env, int_array.obj(), &((*out)[i])); 306 JavaIntArrayToIntVector(env, int_array.obj(), &out->at(i));
278 } 307 }
279 } 308 }
280 309
281 } // namespace android 310 } // namespace android
282 } // namespace base 311 } // namespace base
OLDNEW
« no previous file with comments | « base/android/jni_array.h ('k') | base/android/jni_array_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698