| Index: icu46/source/i18n/bms.cpp
|
| ===================================================================
|
| --- icu46/source/i18n/bms.cpp (revision 0)
|
| +++ icu46/source/i18n/bms.cpp (revision 0)
|
| @@ -0,0 +1,153 @@
|
| +/*
|
| + * Copyright (C) 2008-2009, International Business Machines Corporation and Others.
|
| + * All rights reserved.
|
| + */
|
| +
|
| +#include "unicode/utypes.h"
|
| +#include "cmemory.h"
|
| +#include "unicode/bms.h"
|
| +#include "unicode/unistr.h"
|
| +#include "unicode/colldata.h"
|
| +#include "unicode/bmsearch.h"
|
| +
|
| +
|
| +#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
|
| +
|
| +
|
| +//#define USE_SAFE_CASTS
|
| +#ifdef USE_SAFE_CASTS
|
| +#define STATIC_CAST(type,value) static_cast<type>(value)
|
| +#define CONST_CAST(type,value) const_cast<type>(value)
|
| +#else
|
| +#define STATIC_CAST(type,value) (type) (value)
|
| +#define CONST_CAST(type,value) (type) (value)
|
| +#endif
|
| +
|
| +U_NAMESPACE_USE
|
| +
|
| +U_CAPI UCD * U_EXPORT2
|
| +ucd_open(UCollator *coll, UErrorCode *status)
|
| +{
|
| + return STATIC_CAST(UCD *, CollData::open(coll, *status));
|
| +}
|
| +
|
| +U_CAPI void U_EXPORT2
|
| +ucd_close(UCD *ucd)
|
| +{
|
| + CollData *data = STATIC_CAST(CollData *, ucd);
|
| +
|
| + CollData::close(data);
|
| +}
|
| +
|
| +U_CAPI UCollator * U_EXPORT2
|
| +ucd_getCollator(UCD *ucd)
|
| +{
|
| + CollData *data = STATIC_CAST(CollData *, ucd);
|
| +
|
| + return data->getCollator();
|
| +}
|
| +
|
| +U_CAPI void U_EXPORT2
|
| +ucd_freeCache()
|
| +{
|
| + CollData::freeCollDataCache();
|
| +}
|
| +
|
| +U_CAPI void U_EXPORT2
|
| +ucd_flushCache()
|
| +{
|
| + CollData::flushCollDataCache();
|
| +}
|
| +
|
| +struct BMS
|
| +{
|
| + BoyerMooreSearch *bms;
|
| + const UnicodeString *targetString;
|
| +};
|
| +
|
| +U_CAPI BMS * U_EXPORT2
|
| +bms_open(UCD *ucd,
|
| + const UChar *pattern, int32_t patternLength,
|
| + const UChar *target, int32_t targetLength,
|
| + UErrorCode *status)
|
| +{
|
| + BMS *bms = STATIC_CAST(BMS *, uprv_malloc(sizeof(BMS)));
|
| +
|
| + if (bms == NULL) {
|
| + *status = U_MEMORY_ALLOCATION_ERROR;
|
| + return NULL;
|
| + }
|
| +
|
| + CollData *data = (CollData *) ucd;
|
| + UnicodeString patternString(pattern, patternLength);
|
| +
|
| + if (target != NULL) {
|
| + bms->targetString = new UnicodeString(target, targetLength);
|
| +
|
| + if (bms->targetString == NULL) {
|
| + bms->bms = NULL;
|
| + *status = U_MEMORY_ALLOCATION_ERROR;
|
| + return bms;
|
| + }
|
| + } else {
|
| + bms->targetString = NULL;
|
| + }
|
| +
|
| + bms->bms = new BoyerMooreSearch(data, patternString, bms->targetString, *status);
|
| +
|
| + if (bms->bms == NULL) {
|
| + *status = U_MEMORY_ALLOCATION_ERROR;
|
| + }
|
| +
|
| + return bms;
|
| +}
|
| +
|
| +U_CAPI void U_EXPORT2
|
| +bms_close(BMS *bms)
|
| +{
|
| + delete bms->bms;
|
| +
|
| + delete bms->targetString;
|
| +
|
| + uprv_free(bms);
|
| +}
|
| +
|
| +U_CAPI UBool U_EXPORT2
|
| +bms_empty(BMS *bms)
|
| +{
|
| + return bms->bms->empty();
|
| +}
|
| +
|
| +U_CAPI UCD * U_EXPORT2
|
| +bms_getData(BMS *bms)
|
| +{
|
| + return STATIC_CAST(UCD *, bms->bms->getData());
|
| +}
|
| +
|
| +U_CAPI UBool U_EXPORT2
|
| +bms_search(BMS *bms, int32_t offset, int32_t *start, int32_t *end)
|
| +{
|
| + return bms->bms->search(offset, *start, *end);
|
| +}
|
| +
|
| +U_CAPI void U_EXPORT2
|
| +bms_setTargetString(BMS *bms, const UChar *target, int32_t targetLength, UErrorCode *status)
|
| +{
|
| + if (U_FAILURE(*status)) {
|
| + return;
|
| + }
|
| +
|
| + if (bms->targetString != NULL) {
|
| + delete bms->targetString;
|
| + }
|
| +
|
| + if (target != NULL) {
|
| + bms->targetString = new UnicodeString(target, targetLength);
|
| + } else {
|
| + bms->targetString = NULL;
|
| + }
|
| +
|
| + bms->bms->setTargetString(bms->targetString, *status);
|
| +}
|
| +
|
| +#endif
|
|
|
| Property changes on: icu46/source/i18n/bms.cpp
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|