185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/********************************************************************
285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * COPYRIGHT:
38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * Copyright (C) 2008-2012 IBM, Inc.   All Rights Reserved.
485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho *
585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ********************************************************************/
685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifndef _STRSRCHPERF_H
785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define _STRSRCHPERF_H
885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/usearch.h"
1085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/uperf.h"
1185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include <stdlib.h>
1285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include <stdio.h>
1385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
1485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hotypedef void (*StrSrchFn)(UStringSearch* srch, const UChar* src,int32_t srcLen, const UChar* pttrn, int32_t pttrnLen, UErrorCode* status);
1585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
1685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass StringSearchPerfFunction : public UPerfFunction {
1785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprivate:
1885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    StrSrchFn fn;
1985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const UChar* src;
2085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int32_t srcLen;
2185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const UChar* pttrn;
2285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int32_t pttrnLen;
2385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UStringSearch* srch;
2485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
2585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic:
2685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    virtual void call(UErrorCode* status) {
2785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        (*fn)(srch, src, srcLen, pttrn, pttrnLen, status);
2885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
2985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
3085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    virtual long getOperationsPerIteration() {
3185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return (long) srcLen;
3285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
3385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
3485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    StringSearchPerfFunction(StrSrchFn func, UStringSearch* search, const UChar* source,int32_t sourceLen, const UChar* pattern, int32_t patternLen) {
3585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fn = func;
3685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        src = source;
3785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        srcLen = sourceLen;
3885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        pttrn = pattern;
3985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        pttrnLen = patternLen;
4085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        srch = search;
4185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
4285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho};
4385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
4485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass StringSearchPerformanceTest : public UPerfTest {
4585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprivate:
4685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const UChar* src;
4785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int32_t srcLen;
4885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UChar* pttrn;
4985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int32_t pttrnLen;
5085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UStringSearch* srch;
5185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
5285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic:
5385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status);
5485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    ~StringSearchPerformanceTest();
5585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
5685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UPerfFunction* Test_ICU_Forward_Search();
5785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UPerfFunction* Test_ICU_Backward_Search();
5885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho};
5985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
6085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
6185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid ICUForwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
6285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int32_t match;
6385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
6485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    match = usearch_first(srch, status);
6585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    while (match != USEARCH_DONE) {
6685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        match = usearch_next(srch, status);
6785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
6885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
6985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
7085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid ICUBackwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
7185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int32_t match;
7285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
7385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    match = usearch_last(srch, status);
7485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    while (match != USEARCH_DONE) {
7585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        match = usearch_previous(srch, status);
7685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
7785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
7885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
7985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif /* _STRSRCHPERF_H */
80