static int check_speed() { int cycles = 1000000; double start, stop; struct timeval tv; UTF8String_t st; char long_test[] = "a\303\237a\303\237a\303\237a\303\237" "a\303\237a\303\237a\303\237a\303\237" "a\303\237a\303\237a\303\237a\303\237" "a\303\237a\303\237a\303\237a\303\237" "a\303\237a\303\237a\303\237a\303\237"; int ret; int i; st.buf = (uint8_t *)long_test; st.size = sizeof(long_test) - 1; ret = UTF8String_length(&st); assert(ret == 40); printf("Now wait a bit...\n"); gettimeofday(&tv, 0); start = tv.tv_sec + tv.tv_usec / 1000000.0; for(i = 0; i < cycles; i++) { ret += UTF8String_length(&st); } gettimeofday(&tv, 0); stop = tv.tv_sec + tv.tv_usec / 1000000.0; printf("%d cycles in %.3fms\n", cycles, stop - start); return ret; }
static int memb_chatText_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const UTF8String_t *st = (const UTF8String_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = UTF8String_length(st); if((ssize_t)size < 0) { _ASN_CTFAIL(app_key, td, sptr, "%s: UTF-8: broken encoding (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if((size >= 1 && size <= 128)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } }
static int memb_utf8String_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_consume_bytes_f *app_errlog, void *app_key) { const UTF8String_t *st = (const UTF8String_t *)sptr; size_t size; if(!sptr) { _ASN_ERRLOG(app_errlog, app_key, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = UTF8String_length(st); if((ssize_t)size < 0) { _ASN_ERRLOG(app_errlog, app_key, "%s: UTF-8: broken encoding (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if((size >= 1 && size <= 64)) { /* Constraint check succeeded */ return 0; } else { _ASN_ERRLOG(app_errlog, app_key, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } }
static void check(int expect_length, char *buf, int buflen) { UTF8String_t st; int ret; if(buflen < 0) buflen = strlen(buf); st.buf = (uint8_t *)buf; st.size = buflen; printf("["); for(ret = 0; ret < buflen; ret++) printf("%c", buf[ret]); ret = UTF8String_length(&st); printf("]: size=%d, expect=%d, got=%d\n", buflen, expect_length, ret); assert(ret == expect_length); }