16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/********************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT:
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 2008-2012 IBM, Inc.   All Rights Reserved.
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef _STRSRCHPERF_H
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define _STRSRCHPERF_H
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/usearch.h"
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uperf.h"
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h>
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h>
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef void (*StrSrchFn)(UStringSearch* srch, const UChar* src,int32_t srcLen, const UChar* pttrn, int32_t pttrnLen, UErrorCode* status);
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass StringSearchPerfFunction : public UPerfFunction {
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    StrSrchFn fn;
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UChar* src;
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t srcLen;
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UChar* pttrn;
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t pttrnLen;
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UStringSearch* srch;
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void call(UErrorCode* status) {
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        (*fn)(srch, src, srcLen, pttrn, pttrnLen, status);
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual long getOperationsPerIteration() {
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return (long) srcLen;
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    StringSearchPerfFunction(StrSrchFn func, UStringSearch* search, const UChar* source,int32_t sourceLen, const UChar* pattern, int32_t patternLen) {
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fn = func;
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        src = source;
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        srcLen = sourceLen;
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        pttrn = pattern;
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        pttrnLen = patternLen;
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        srch = search;
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass StringSearchPerformanceTest : public UPerfTest {
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UChar* src;
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t srcLen;
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar* pttrn;
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t pttrnLen;
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UStringSearch* srch;
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status);
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ~StringSearchPerformanceTest();
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UPerfFunction* Test_ICU_Forward_Search();
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UPerfFunction* Test_ICU_Backward_Search();
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ICUForwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t match;
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    match = usearch_first(srch, status);
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    while (match != USEARCH_DONE) {
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        match = usearch_next(srch, status);
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ICUBackwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t match;
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    match = usearch_last(srch, status);
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    while (match != USEARCH_DONE) {
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        match = usearch_previous(srch, status);
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* _STRSRCHPERF_H */
80