Lines Matching refs:env

61 static inline bool java2time(JNIEnv* env, Time* t, jobject o)
63 t->t.tm_sec = env->GetIntField(o, g_secField);
64 t->t.tm_min = env->GetIntField(o, g_minField);
65 t->t.tm_hour = env->GetIntField(o, g_hourField);
66 t->t.tm_mday = env->GetIntField(o, g_mdayField);
67 t->t.tm_mon = env->GetIntField(o, g_monField);
68 t->t.tm_year = (env->GetIntField(o, g_yearField))-1900;
69 t->t.tm_wday = env->GetIntField(o, g_wdayField);
70 t->t.tm_yday = env->GetIntField(o, g_ydayField);
71 t->t.tm_isdst = env->GetIntField(o, g_isdstField);
72 t->t.tm_gmtoff = env->GetLongField(o, g_gmtoffField);
73 bool allDay = env->GetBooleanField(o, g_allDayField);
76 jniThrowException(env, "java/lang/IllegalArgumentException",
83 static inline void time2java(JNIEnv* env, jobject o, const Time &t)
85 env->SetIntField(o, g_secField, t.t.tm_sec);
86 env->SetIntField(o, g_minField, t.t.tm_min);
87 env->SetIntField(o, g_hourField, t.t.tm_hour);
88 env->SetIntField(o, g_mdayField, t.t.tm_mday);
89 env->SetIntField(o, g_monField, t.t.tm_mon);
90 env->SetIntField(o, g_yearField, t.t.tm_year+1900);
91 env->SetIntField(o, g_wdayField, t.t.tm_wday);
92 env->SetIntField(o, g_ydayField, t.t.tm_yday);
93 env->SetIntField(o, g_isdstField, t.t.tm_isdst);
94 env->SetLongField(o, g_gmtoffField, t.t.tm_gmtoff);
99 = (jstring) env->GetObjectField(This, g_timezoneField); \
100 t.timezone = env->GetStringUTFChars(timezoneString_##This, NULL);
103 env->ReleaseStringUTFChars(timezoneString_##This, t.timezone);
108 static jlong android_text_format_Time_normalize(JNIEnv* env, jobject This,
112 if (!java2time(env, &t, This)) return 0L;
117 time2java(env, This, t);
123 static void android_text_format_Time_switchTimezone(JNIEnv* env, jobject This,
127 if (!java2time(env, &t, This)) return;
130 const char* timezone = env->GetStringUTFChars(timezoneObject, NULL);
134 time2java(env, This, t);
135 env->ReleaseStringUTFChars(timezoneObject, timezone);
139 env->SetObjectField(This, g_timezoneField, timezoneObject);
142 static jint android_text_format_Time_compare(JNIEnv* env, jobject clazz,
147 if (!java2time(env, &a, aObject)) return 0;
150 if (!java2time(env, &b, bObject)) return 0;
161 static jstring android_text_format_Time_format2445(JNIEnv* env, jobject This)
164 if (!java2time(env, &t, This)) return env->NewStringUTF("");
165 bool allDay = env->GetBooleanField(This, g_allDayField);
176 return env->NewString((jchar*)buf, 16);
178 return env->NewString((jchar*)buf, 15);
183 return env->NewString((jchar*)buf, 8);
187 static jstring android_text_format_Time_format(JNIEnv* env, jobject This,
201 if (!java2time(env, &t, This)) return env->NewStringUTF("");
204 jobject js_locale = (jobject) env->GetStaticObjectField(timeClass, g_localeField);
209 env->ReleaseStringUTFChars(js_mon[i], locale.mon[i]);
210 env->ReleaseStringUTFChars(js_month[i], locale.month[i]);
211 env->ReleaseStringUTFChars(js_standalone_month[i], locale.standalone_month[i]);
212 env->DeleteGlobalRef(js_mon[i]);
213 env->DeleteGlobalRef(js_month[i]);
214 env->DeleteGlobalRef(js_standalone_month[i]);
218 env->ReleaseStringUTFChars(js_wday[i], locale.wday[i]);
219 env->ReleaseStringUTFChars(js_weekday[i], locale.weekday[i]);
220 env->DeleteGlobalRef(js_wday[i]);
221 env->DeleteGlobalRef(js_weekday[i]);
224 env->ReleaseStringUTFChars(js_X_fmt, locale.X_fmt);
225 env->ReleaseStringUTFChars(js_x_fmt, locale.x_fmt);
226 env->ReleaseStringUTFChars(js_c_fmt, locale.c_fmt);
227 env->ReleaseStringUTFChars(js_am, locale.am);
228 env->ReleaseStringUTFChars(js_pm, locale.pm);
229 env->ReleaseStringUTFChars(js_date_fmt, locale.date_fmt);
230 env->DeleteGlobalRef(js_X_fmt);
231 env->DeleteGlobalRef(js_x_fmt);
232 env->DeleteGlobalRef(js_c_fmt);
233 env->DeleteGlobalRef(js_am);
234 env->DeleteGlobalRef(js_pm);
235 env->DeleteGlobalRef(js_date_fmt);
240 ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortMonthsField);
243 js_mon[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
244 locale.mon[i] = env->GetStringUTFChars(js_mon[i], NULL);
247 ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longMonthsField);
250 js_month[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
251 locale.month[i] = env->GetStringUTFChars(js_month[i], NULL);
254 ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longStandaloneMonthsField);
257 js_standalone_month[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
258 locale.standalone_month[i] = env->GetStringUTFChars(js_standalone_month[i], NULL);
261 ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortWeekdaysField);
264 js_wday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i + 1));
265 locale.wday[i] = env->GetStringUTFChars(js_wday[i], NULL);
268 ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longWeekdaysField);
271 js_weekday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i + 1));
272 locale.weekday[i] = env->GetStringUTFChars(js_weekday[i], NULL);
275 js_X_fmt = (jstring) env->NewGlobalRef(env->GetStaticObjectField(
277 locale.X_fmt = env->GetStringUTFChars(js_X_fmt, NULL);
279 js_x_fmt = (jstring) env->NewGlobalRef(env->GetStaticObjectField(
281 locale.x_fmt = env->GetStringUTFChars(js_x_fmt, NULL);
283 js_c_fmt = (jstring) env->NewGlobalRef(env->GetStaticObjectField(
285 locale.c_fmt = env->GetStringUTFChars(js_c_fmt, NULL);
287 js_am = (jstring) env->NewGlobalRef(env->GetStaticObjectField(
289 locale.am = env->GetStringUTFChars(js_am, NULL);
291 js_pm = (jstring) env->NewGlobalRef(env->GetStaticObjectField(
293 locale.pm = env->GetStringUTFChars(js_pm, NULL);
295 js_date_fmt = (jstring) env->NewGlobalRef(env->GetStaticObjectField(
297 locale.date_fmt = env->GetStringUTFChars(js_date_fmt, NULL);
302 const char* format = env->GetStringUTFChars(formatObject, NULL);
306 env->ReleaseStringUTFChars(formatObject, format);
309 return env->NewStringUTF(r.string());
313 static jstring android_text_format_Time_toString(JNIEnv* env, jobject This)
316 if (!java2time(env, &t, This)) return env->NewStringUTF("");
323 return env->NewStringUTF(r.string());
326 static void android_text_format_Time_setToNow(JNIEnv* env, jobject This)
328 env->SetBooleanField(This, g_allDayField, JNI_FALSE);
334 time2java(env, This, t);
338 static jlong android_text_format_Time_toMillis(JNIEnv* env, jobject This,
342 if (!java2time(env, &t, This)) return 0L;
352 static void android_text_format_Time_set(JNIEnv* env, jobject This, jlong millis)
354 env->SetBooleanField(This, g_allDayField, JNI_FALSE);
360 time2java(env, This, t);
368 static int get_char(JNIEnv* env, const ScopedStringChars& s, int spos, int mul,
376 jniThrowExceptionFmt(env, "android/util/TimeFormatException",
384 static bool check_char(JNIEnv* env, const ScopedStringChars& s, int spos, jchar expected)
388 jniThrowExceptionFmt(env, "android/util/TimeFormatException",
397 static jboolean android_text_format_Time_parse(JNIEnv* env, jobject This, jstring strObj)
399 jsize len = env->GetStringLength(strObj);
401 jniThrowException(env, "android/util/TimeFormatException",
408 ScopedStringChars s(env, strObj);
413 n = get_char(env, s, 0, 1000, &thrown);
414 n += get_char(env, s, 1, 100, &thrown);
415 n += get_char(env, s, 2, 10, &thrown);
416 n += get_char(env, s, 3, 1, &thrown);
418 env->SetIntField(This, g_yearField, n);
421 n = get_char(env, s, 4, 10, &thrown);
422 n += get_char(env, s, 5, 1, &thrown);
425 env->SetIntField(This, g_monField, n);
428 n = get_char(env, s, 6, 10, &thrown);
429 n += get_char(env, s, 7, 1, &thrown);
431 env->SetIntField(This, g_mdayField, n);
435 if (!check_char(env, s, 8, 'T')) return false;
436 env->SetBooleanField(This, g_allDayField, JNI_FALSE);
439 n = get_char(env, s, 9, 10, &thrown);
440 n += get_char(env, s, 10, 1, &thrown);
442 env->SetIntField(This, g_hourField, n);
445 n = get_char(env, s, 11, 10, &thrown);
446 n += get_char(env, s, 12, 1, &thrown);
448 env->SetIntField(This, g_minField, n);
451 n = get_char(env, s, 13, 10, &thrown);
452 n += get_char(env, s, 14, 1, &thrown);
454 env->SetIntField(This, g_secField, n);
458 if (!check_char(env, s, 15, 'Z')) return false;
462 env->SetBooleanField(This, g_allDayField, JNI_TRUE);
463 env->SetIntField(This, g_hourField, 0);
464 env->SetIntField(This, g_minField, 0);
465 env->SetIntField(This, g_secField, 0);
468 env->SetIntField(This, g_wdayField, 0);
469 env->SetIntField(This, g_ydayField, 0);
470 env->SetIntField(This, g_isdstField, -1);
471 env->SetLongField(This, g_gmtoffField, 0);
476 static jboolean android_text_format_Time_parse3339(JNIEnv* env,
480 jsize len = env->GetStringLength(strObj);
482 jniThrowException(env, "android/util/TimeFormatException",
489 ScopedStringChars s(env, strObj);
494 n = get_char(env, s, 0, 1000, &thrown);
495 n += get_char(env, s, 1, 100, &thrown);
496 n += get_char(env, s, 2, 10, &thrown);
497 n += get_char(env, s, 3, 1, &thrown);
499 env->SetIntField(This, g_yearField, n);
502 if (!check_char(env, s, 4, '-')) return false;
505 n = get_char(env, s, 5, 10, &thrown);
506 n += get_char(env, s, 6, 1, &thrown);
509 env->SetIntField(This, g_monField, n);
512 if (!check_char(env, s, 7, '-')) return false;
515 n = get_char(env, s, 8, 10, &thrown);
516 n += get_char(env, s, 9, 1, &thrown);
518 env->SetIntField(This, g_mdayField, n);
522 if (!check_char(env, s, 10, 'T')) return false;
524 env->SetBooleanField(This, g_allDayField, JNI_FALSE);
526 n = get_char(env, s, 11, 10, &thrown);
527 n += get_char(env, s, 12, 1, &thrown);
530 // env->SetIntField(This, g_hourField, n);
533 if (!check_char(env, s, 13, ':')) return false;
536 n = get_char(env, s, 14, 10, &thrown);
537 n += get_char(env, s, 15, 1, &thrown);
540 // env->SetIntField(This, g_minField, n);
543 if (!check_char(env, s, 16, ':')) return false;
546 n = get_char(env, s, 17, 10, &thrown);
547 n += get_char(env, s, 18, 1, &thrown);
549 env->SetIntField(This, g_secField, n);
579 jniThrowExceptionFmt(env, "android/util/TimeFormatException",
588 jniThrowExceptionFmt(env, "android/util/TimeFormatException",
595 n = get_char(env, s, tz_index + 1, 10, &thrown);
596 n += get_char(env, s, tz_index + 2, 1, &thrown);
602 if (!check_char(env, s, tz_index + 3, ':')) return false;
605 n = get_char(env, s, tz_index + 4, 10, &thrown);
606 n += get_char(env, s, tz_index + 5, 1, &thrown);
612 env->SetIntField(This, g_hourField, hour);
613 env->SetIntField(This, g_minField, minute);
617 android_text_format_Time_normalize(env, This, false /* use isdst */);
621 env->SetBooleanField(This, g_allDayField, JNI_TRUE);
622 env->SetIntField(This, g_hourField, 0);
623 env->SetIntField(This, g_minField, 0);
624 env->SetIntField(This, g_secField, 0);
627 env->SetIntField(This, g_wdayField, 0);
628 env->SetIntField(This, g_ydayField, 0);
629 env->SetIntField(This, g_isdstField, -1);
630 env->SetLongField(This, g_gmtoffField, 0);
654 int register_android_text_format_Time(JNIEnv* env)
656 jclass timeClass = env->FindClass("android/text/format/Time");
658 g_timeClass = (jclass) env->NewGlobalRef(timeClass);
660 g_allDayField = env->GetFieldID(timeClass, "allDay", "Z");
661 g_secField = env->GetFieldID(timeClass, "second", "I");
662 g_minField = env->GetFieldID(timeClass, "minute", "I");
663 g_hourField = env->GetFieldID(timeClass, "hour", "I");
664 g_mdayField = env->GetFieldID(timeClass, "monthDay", "I");
665 g_monField = env->GetFieldID(timeClass, "month", "I");
666 g_yearField = env->GetFieldID(timeClass, "year", "I");
667 g_wdayField = env->GetFieldID(timeClass, "weekDay", "I");
668 g_ydayField = env->GetFieldID(timeClass, "yearDay", "I");
669 g_isdstField = env->GetFieldID(timeClass, "isDst", "I");
670 g_gmtoffField = env->GetFieldID(timeClass, "gmtoff", "J");
671 g_timezoneField = env->GetFieldID(timeClass, "timezone", "Ljava/lang/String;");
673 g_shortMonthsField = env->GetStaticFieldID(timeClass, "sShortMonths", "[Ljava/lang/String;");
674 g_longMonthsField = env->GetStaticFieldID(timeClass, "sLongMonths", "[Ljava/lang/String;");
675 g_longStandaloneMonthsField = env->GetStaticFieldID(timeClass, "sLongStandaloneMonths", "[Ljava/lang/String;");
676 g_shortWeekdaysField = env->GetStaticFieldID(timeClass, "sShortWeekdays", "[Ljava/lang/String;");
677 g_longWeekdaysField = env->GetStaticFieldID(timeClass, "sLongWeekdays", "[Ljava/lang/String;");
678 g_timeOnlyFormatField = env->GetStaticFieldID(timeClass, "sTimeOnlyFormat", "Ljava/lang/String;");
679 g_dateOnlyFormatField = env->GetStaticFieldID(timeClass, "sDateOnlyFormat", "Ljava/lang/String;");
680 g_dateTimeFormatField = env->GetStaticFieldID(timeClass, "sDateTimeFormat", "Ljava/lang/String;");
681 g_amField = env->GetStaticFieldID(timeClass, "sAm", "Ljava/lang/String;");
682 g_pmField = env->GetStaticFieldID(timeClass, "sPm", "Ljava/lang/String;");
683 g_dateCommandField = env->GetStaticFieldID(timeClass, "sDateCommand", "Ljava/lang/String;");
684 g_localeField = env->GetStaticFieldID(timeClass, "sLocale", "Ljava/util/Locale;");
686 return AndroidRuntime::registerNativeMethods(env, "android/text/format/Time", gMethods, NELEM(gMethods));