2014-10-05 3 views
2

Я пишу код, который делает индексы в базе данных. С библиотекой ICU мой рабочий процесс:boost :: locale icu sortKey

  • строка в пользовательской локали ->
    преобразования в utf8 ->
    нормализуют utf8 ->
    вызов ICU ucol_getSortKey, чтобы получить ключ для сортировки индекса здания.

Теперь я переключился на Boost Locale. Может ли Boost Locale строить ключи сортировки, такие как ICU? Или я должен назвать ICU как-то напрямую?

ответ

1

Похоже, это то, что Повысьте Locale знает как collate_impl::do_[basic_]transform():

std::vector<uint8_t> do_basic_transform(level_type level,CharType const *b,CharType const *e) const 
{ 
    icu::UnicodeString str=cvt_.icu(b,e); 
    std::vector<uint8_t> tmp; 
    tmp.resize(str.length()); 
    icu::Collator *collate = get_collator(level); 
    int len = collate->getSortKey(str,&tmp[0],tmp.size()); 
    if(len > int(tmp.size())) { 
     tmp.resize(len); 
     collate->getSortKey(str,&tmp[0],tmp.size()); 
    } 
    else 
     tmp.resize(len); 
    return tmp; 
} 

std::basic_string<CharType> do_transform(level_type level,CharType const *b,CharType const *e) const 
{ 
    std::vector<uint8_t> tmp = do_basic_transform(level,b,e); 
    return std::basic_string<CharType>(tmp.begin(),tmp.end()); 
} 

Для повышения производительности, это выглядит, как вы хотите позвонить do_basic_compare

Смежные вопросы