C++ udata_setCommonData的反转顺序

C++ udata_setCommonData的反转顺序,c++,icu,C++,Icu,ICU的文件表明: 从ICU 4.4开始,可以设置多个数据包, 每次调用此函数一次。udata_open()将在 按设置顺序排列多个数据包 但是,我希望udata_open()以相反的顺序查找数据,以便在添加新的udata_setCommonData后,可以用新数据覆盖任何以前的数据。显然,如果使用数据的对象已经实例化,它将使用旧的集合,但是任何新数据都应该使用新数据。我猜答案在doLoadFromCommonData附近的udata.cpp中,希望进行此更改不会太复杂。在这个函数中,我明白了

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的好用法,强烈不推荐使用。抱歉


如果您想动态更新数据,请提出功能请求,或者最好为其提供代码。

我在您的问题中没有看到问号。问题是什么?我已提交了问题标题的更新。。