U_CAPI int32_t U_EXPORT2 udbg_enumByString(UDebugEnumType type, const UnicodeString& string) { if(type<0||type>=UDBG_ENUM_COUNT) { return -1; } // initialize array udbg_enumString(type,0); // search /// printf("type=%d\n", type); fflush(stdout); for(int i=0;i<udbg_enumCount(type);i++) { // printf("i=%d/%d\n", i, udbg_enumCount(type)); fflush(stdout); if(string == (strs[type][i])) { return i; } } return -1; }
U_TOOLUTIL_API const UnicodeString& U_EXPORT2 udbg_enumString(UDebugEnumType type, int32_t field) { if(strs == NULL ) { udbg_setup(); } if(type<0||type>=UDBG_ENUM_COUNT) { // use UDBG_ENUM_COUNT,0 to mean an empty string //fprintf(stderr, "** returning out of range on %d\n",type); //fflush(stderr); return strs[UDBG_ENUM_COUNT][0]; } int32_t count = udbg_enumCount(type); //fprintf(stderr, "enumString [%d,%d]: typecount %d, fieldcount %d\n", type,field,UDBG_ENUM_COUNT,count); //fflush(stderr); if(field<0 || field > count) { return strs[type][count]; } else { return strs[type][field]; } }
U_CDECL_END static void udbg_setup(void) { if(strs == NULL) { udbg_register_cleanup(); //fprintf(stderr,"Initializing string cache..\n"); //fflush(stderr); UnicodeString **newStrs = new UnicodeString*[UDBG_ENUM_COUNT+1]; for(int t=0;t<UDBG_ENUM_COUNT;t++) { int32_t c = udbg_enumCount((UDebugEnumType)t); newStrs[t] = new UnicodeString[c+1]; for(int f=0;f<=c;f++) { _fieldString((UDebugEnumType)t, f, newStrs[t][f]); } } newStrs[UDBG_ENUM_COUNT] = new UnicodeString[1]; // empty string strs = newStrs; } }
FieldsSet::FieldsSet(UDebugEnumType field) { construct(field, udbg_enumCount(field)); }