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