C++ udata_setCommonData的反转顺序
ICU的文件表明: 从ICU 4.4开始,可以设置多个数据包, 每次调用此函数一次。udata_open()将在 按设置顺序排列多个数据包 但是,我希望udata_open()以相反的顺序查找数据,以便在添加新的udata_setCommonData后,可以用新数据覆盖任何以前的数据。显然,如果使用数据的对象已经实例化,它将使用旧的集合,但是任何新数据都应该使用新数据。我猜答案在doLoadFromCommonData附近的udata.cpp中,希望进行此更改不会太复杂。在这个函数中,我明白了C++ udata_setCommonData的反转顺序,c++,icu,C++,Icu,ICU的文件表明: 从ICU 4.4开始,可以设置多个数据包, 每次调用此函数一次。udata_open()将在 按设置顺序排列多个数据包 但是,我希望udata_open()以相反的顺序查找数据,以便在添加新的udata_setCommonData后,可以用新数据覆盖任何以前的数据。显然,如果使用数据的对象已经实例化,它将使用旧的集合,但是任何新数据都应该使用新数据。我猜答案在doLoadFromCommonData附近的udata.cpp中,希望进行此更改不会太复杂。在这个函数中,我明白了
if (!isICUData) {
return NULL;
} else if (pCommonData != NULL) {
++commonDataIndex; /* try the next data package */
} else if ((!checkedExtendedICUData) && extendICUData(subErrorCode)) {
checkedExtendedICUData = TRUE;
/* try this data package slot again: it changed from NULL to non-NULL */
} else {
return NULL;
我想我应该从顶部开始,改用--commonDataIndex
更新。我发现,只要指针相同,我也可以交换内容,然后重新运行udata_setCommonData。也许这是一个很好的解决方案,可以避免修改ICU代码。只需要分配我可能遇到的最大可能大小-这。。也许更棘手
或者,一种获取公共数据的方法也可能很好
或者,将指针存储为指向数据的指针,而不是中指向数据的指针
for (i = 0; i < LENGTHOF(gCommonICUDataArray); ++i) {
if (gCommonICUDataArray[i] == NULL) {
gCommonICUDataArray[i] = newCommonData;
ucln_common_registerCleanup(UCLN_COMMON_UDATA, udata_cleanup);
didUpdate = TRUE;
break;
} else if (gCommonICUDataArray[i]->pHeader == pData->pHeader) {
/* The same data pointer is already in the array. */
break;
}
for(i=0;ipHeader==pData->pHeader){
/*数组中已存在相同的数据指针*/
打破
}
唯一安全(或理智)的方法是调用u\u cleanup()
并重新开始。否则这根本不是ICU的好用法,强烈不推荐使用。抱歉
如果您想动态更新数据,请提出功能请求,或者最好为其提供代码。我在您的问题中没有看到问号。问题是什么?我已提交了问题标题的更新。。