Home | History | Annotate | Download | only in strsrchperf
      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:
     26     virtual void call(UErrorCode* status) {
     27         (*fn)(srch, src, srcLen, pttrn, pttrnLen, status);
     28     }
     29 
     30     virtual long getOperationsPerIteration() {
     31         return (long) srcLen;
     32     }
     33 
     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 
     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 
     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