static void dummyTest(UBool make16BitTrie) { int32_t mem[UTRIE_DUMMY_SIZE/4]; UTrie trie; UErrorCode errorCode; UChar32 c; uint32_t value, initialValue, leadUnitValue; if(make16BitTrie) { initialValue=0x313; leadUnitValue=0xaffe; } else { initialValue=0x01234567; leadUnitValue=0x89abcdef; } errorCode=U_ZERO_ERROR; utrie_unserializeDummy(&trie, mem, sizeof(mem), initialValue, leadUnitValue, make16BitTrie, &errorCode); if(U_FAILURE(errorCode)) { log_err("utrie_unserializeDummy(make16BitTrie=%d) failed - %s\n", make16BitTrie, u_errorName(errorCode)); return; } trie.getFoldingOffset=dummyGetFoldingOffset; /* test that all code points have initialValue */ for(c=0; c<=0x10ffff; ++c) { if(make16BitTrie) { UTRIE_GET16(&trie, c, value); } else { UTRIE_GET32(&trie, c, value); } if(value!=initialValue) { log_err("UTRIE_GET%s(dummy, U+%04lx)=0x%lx instead of 0x%lx\n", make16BitTrie ? "16" : "32", (long)c, (long)value, (long)initialValue); } } /* test that the lead surrogate code units have leadUnitValue */ for(c=0xd800; c<=0xdbff; ++c) { if(make16BitTrie) { value=UTRIE_GET16_FROM_LEAD(&trie, c); } else { value=UTRIE_GET32_FROM_LEAD(&trie, c); } if(value!=leadUnitValue) { log_err("UTRIE_GET%s_FROM_LEAD(dummy, U+%04lx)=0x%lx instead of 0x%lx\n", make16BitTrie ? "16" : "32", (long)c, (long)value, (long)leadUnitValue); } } }
U_CAPI const UBiDiProps * U_EXPORT2 ubidi_getDummy(UErrorCode *pErrorCode) { UBiDiProps *bdp; if(U_FAILURE(*pErrorCode)) { return NULL; } UMTX_CHECK(NULL, gBdpDummy, bdp); if(bdp!=NULL) { /* the dummy object was already created */ return bdp; } else /* bdp==NULL */ { /* create the dummy object */ int32_t *indexes; bdp=(UBiDiProps *)uprv_malloc(sizeof(UBiDiProps)+UBIDI_IX_TOP*4+UTRIE_DUMMY_SIZE); if(bdp==NULL) { *pErrorCode=U_MEMORY_ALLOCATION_ERROR; return NULL; } uprv_memset(bdp, 0, sizeof(UBiDiProps)+UBIDI_IX_TOP*4); bdp->indexes=indexes=(int32_t *)(bdp+1); indexes[UBIDI_IX_INDEX_TOP]=UBIDI_IX_TOP; indexes[UBIDI_IX_TRIE_SIZE]= utrie_unserializeDummy(&bdp->trie, indexes+UBIDI_IX_TOP, UTRIE_DUMMY_SIZE, 0, 0, TRUE, pErrorCode); if(U_FAILURE(*pErrorCode)) { uprv_free(bdp); return NULL; } bdp->formatVersion[0]=1; bdp->formatVersion[2]=UTRIE_SHIFT; bdp->formatVersion[3]=UTRIE_INDEX_SHIFT; /* set the static variables */ umtx_lock(NULL); if(gBdpDummy==NULL) { gBdpDummy=bdp; bdp=NULL; ucln_common_registerCleanup(UCLN_COMMON_UBIDI, ubidi_cleanup); } umtx_unlock(NULL); uprv_free(bdp); return gBdpDummy; } }
U_CAPI const UCaseProps * U_EXPORT2 ucase_getDummy(UErrorCode *pErrorCode) { UCaseProps *csp; if(U_FAILURE(*pErrorCode)) { return NULL; } UMTX_CHECK(NULL, gCspDummy, csp); if(csp!=NULL) { /* the dummy object was already created */ return csp; } else /* csp==NULL */ { /* create the dummy object */ int32_t *indexes; csp=(UCaseProps *)uprv_malloc(sizeof(UCaseProps)+UCASE_IX_TOP*4+UTRIE_DUMMY_SIZE); if(csp==NULL) { *pErrorCode=U_MEMORY_ALLOCATION_ERROR; return NULL; } uprv_memset(csp, 0, sizeof(UCaseProps)+UCASE_IX_TOP*4); csp->indexes=indexes=(int32_t *)(csp+1); indexes[UCASE_IX_INDEX_TOP]=UCASE_IX_TOP; indexes[UCASE_IX_TRIE_SIZE]= utrie_unserializeDummy(&csp->trie, indexes+UCASE_IX_TOP, UTRIE_DUMMY_SIZE, 0, 0, TRUE, pErrorCode); if(U_FAILURE(*pErrorCode)) { uprv_free(csp); return NULL; } csp->formatVersion[0]=1; csp->formatVersion[2]=UTRIE_SHIFT; csp->formatVersion[3]=UTRIE_INDEX_SHIFT; /* set the static variables */ umtx_lock(NULL); if(gCspDummy==NULL) { gCspDummy=csp; csp=NULL; ucln_common_registerCleanup(UCLN_COMMON_UCASE, ucase_cleanup); } umtx_unlock(NULL); uprv_free(csp); return gCspDummy; } }