You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.6 KiB
85 lines
2.6 KiB
4 months ago
|
/************************************************************************
|
||
|
* © 2016 and later: Unicode, Inc. and others.
|
||
|
* License & terms of use: http://www.unicode.org/copyright.html
|
||
|
*
|
||
|
*************************************************************************
|
||
|
********************************************************************
|
||
|
* COPYRIGHT:
|
||
|
* Copyright (C) 2008-2012 IBM, Inc. All Rights Reserved.
|
||
|
*
|
||
|
********************************************************************/
|
||
|
#ifndef _STRSRCHPERF_H
|
||
|
#define _STRSRCHPERF_H
|
||
|
|
||
|
#include "unicode/usearch.h"
|
||
|
#include "unicode/uperf.h"
|
||
|
#include <stdlib.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
typedef void (*StrSrchFn)(UStringSearch* srch, const UChar* src,int32_t srcLen, const UChar* pttrn, int32_t pttrnLen, UErrorCode* status);
|
||
|
|
||
|
class StringSearchPerfFunction : public UPerfFunction {
|
||
|
private:
|
||
|
StrSrchFn fn;
|
||
|
const UChar* src;
|
||
|
int32_t srcLen;
|
||
|
const UChar* pttrn;
|
||
|
int32_t pttrnLen;
|
||
|
UStringSearch* srch;
|
||
|
|
||
|
public:
|
||
|
virtual void call(UErrorCode* status) {
|
||
|
(*fn)(srch, src, srcLen, pttrn, pttrnLen, status);
|
||
|
}
|
||
|
|
||
|
virtual long getOperationsPerIteration() {
|
||
|
return (long) srcLen;
|
||
|
}
|
||
|
|
||
|
StringSearchPerfFunction(StrSrchFn func, UStringSearch* search, const UChar* source,int32_t sourceLen, const UChar* pattern, int32_t patternLen) {
|
||
|
fn = func;
|
||
|
src = source;
|
||
|
srcLen = sourceLen;
|
||
|
pttrn = pattern;
|
||
|
pttrnLen = patternLen;
|
||
|
srch = search;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class StringSearchPerformanceTest : public UPerfTest {
|
||
|
private:
|
||
|
const UChar* src;
|
||
|
int32_t srcLen;
|
||
|
UChar* pttrn;
|
||
|
int32_t pttrnLen;
|
||
|
UStringSearch* srch;
|
||
|
|
||
|
public:
|
||
|
StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status);
|
||
|
~StringSearchPerformanceTest();
|
||
|
virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
|
||
|
UPerfFunction* Test_ICU_Forward_Search();
|
||
|
UPerfFunction* Test_ICU_Backward_Search();
|
||
|
};
|
||
|
|
||
|
|
||
|
void ICUForwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
|
||
|
int32_t match;
|
||
|
|
||
|
match = usearch_first(srch, status);
|
||
|
while (match != USEARCH_DONE) {
|
||
|
match = usearch_next(srch, status);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ICUBackwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
|
||
|
int32_t match;
|
||
|
|
||
|
match = usearch_last(srch, status);
|
||
|
while (match != USEARCH_DONE) {
|
||
|
match = usearch_previous(srch, status);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif /* _STRSRCHPERF_H */
|