• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /********************************************************************
2  * COPYRIGHT:
3  * Copyright (C) 2008-2012 IBM, Inc.   All Rights Reserved.
4  *
5  ********************************************************************/
6 #ifndef _STRSRCHPERF_H
7 #define _STRSRCHPERF_H
8 
9 #include "unicode/usearch.h"
10 #include "unicode/uperf.h"
11 #include <stdlib.h>
12 #include <stdio.h>
13 
14 typedef void (*StrSrchFn)(UStringSearch* srch, const UChar* src,int32_t srcLen, const UChar* pttrn, int32_t pttrnLen, UErrorCode* status);
15 
16 class StringSearchPerfFunction : public UPerfFunction {
17 private:
18     StrSrchFn fn;
19     const UChar* src;
20     int32_t srcLen;
21     const UChar* pttrn;
22     int32_t pttrnLen;
23     UStringSearch* srch;
24 
25 public:
call(UErrorCode * status)26     virtual void call(UErrorCode* status) {
27         (*fn)(srch, src, srcLen, pttrn, pttrnLen, status);
28     }
29 
getOperationsPerIteration()30     virtual long getOperationsPerIteration() {
31         return (long) srcLen;
32     }
33 
StringSearchPerfFunction(StrSrchFn func,UStringSearch * search,const UChar * source,int32_t sourceLen,const UChar * pattern,int32_t patternLen)34     StringSearchPerfFunction(StrSrchFn func, UStringSearch* search, const UChar* source,int32_t sourceLen, const UChar* pattern, int32_t patternLen) {
35         fn = func;
36         src = source;
37         srcLen = sourceLen;
38         pttrn = pattern;
39         pttrnLen = patternLen;
40         srch = search;
41     }
42 };
43 
44 class StringSearchPerformanceTest : public UPerfTest {
45 private:
46     const UChar* src;
47     int32_t srcLen;
48     UChar* pttrn;
49     int32_t pttrnLen;
50     UStringSearch* srch;
51 
52 public:
53     StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status);
54     ~StringSearchPerformanceTest();
55     virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
56     UPerfFunction* Test_ICU_Forward_Search();
57     UPerfFunction* Test_ICU_Backward_Search();
58 };
59 
60 
ICUForwardSearch(UStringSearch * srch,const UChar * source,int32_t sourceLen,const UChar * pattern,int32_t patternLen,UErrorCode * status)61 void ICUForwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
62     int32_t match;
63 
64     match = usearch_first(srch, status);
65     while (match != USEARCH_DONE) {
66         match = usearch_next(srch, status);
67     }
68 }
69 
ICUBackwardSearch(UStringSearch * srch,const UChar * source,int32_t sourceLen,const UChar * pattern,int32_t patternLen,UErrorCode * status)70 void ICUBackwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
71     int32_t match;
72 
73     match = usearch_last(srch, status);
74     while (match != USEARCH_DONE) {
75         match = usearch_previous(srch, status);
76     }
77 }
78 
79 #endif /* _STRSRCHPERF_H */
80