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 |