strsrchperf.h revision 85bf2e2fbc60a9f938064abc8127d61da7d19882
185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/******************************************************************** 285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * COPYRIGHT: 385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Copyright (C) 2008-2009 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/ubrk.h" 1085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/usearch.h" 1185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/colldata.h" 1285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/bmsearch.h" 1385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/uperf.h" 1485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include <stdlib.h> 1585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include <stdio.h> 1685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 1785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define TEST_BOYER_MOORE_SEARCH 1885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 1985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TEST_BOYER_MOORE_SEARCH 2085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hotypedef void (*StrSrchFn) (BoyerMooreSearch * bms, const UChar *src, int32_t srcLen, const UChar *pttrn, int32_t pttrnLen, UErrorCode *status); 2185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 2285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hotypedef void (*StrSrchFn)(UStringSearch* srch, const UChar* src,int32_t srcLen, const UChar* pttrn, int32_t pttrnLen, UErrorCode* status); 2385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 2485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 2585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass StringSearchPerfFunction : public UPerfFunction { 2685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprivate: 2785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho StrSrchFn fn; 2885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const UChar* src; 2985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t srcLen; 3085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const UChar* pttrn; 3185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t pttrnLen; 3285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TEST_BOYER_MOORE_SEARCH 3385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho BoyerMooreSearch *bms; 3485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 3585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UStringSearch* srch; 3685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 3785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 3885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 3985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void call(UErrorCode* status) { 4085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TEST_BOYER_MOORE_SEARCH 4185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho (*fn)(bms, src, srcLen, pttrn, pttrnLen, status); 4285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 4385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho (*fn)(srch, src, srcLen, pttrn, pttrnLen, status); 4485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 4585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 4685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 4785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual long getOperationsPerIteration() { 4885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#if 0 4985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return (long)(srcLen/pttrnLen); 5085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 5185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return (long) srcLen; 5285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 5385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 5485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 5585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TEST_BOYER_MOORE_SEARCH 5685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho StringSearchPerfFunction(StrSrchFn func, BoyerMooreSearch *search, const UChar *source, int32_t sourceLen, const UChar *pattern, int32_t patternLen) { 5785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fn = func; 5885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho src = source; 5985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho srcLen = sourceLen; 6085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrn = pattern; 6185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrnLen = patternLen; 6285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho bms = search; 6385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 6485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 6585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho StringSearchPerfFunction(StrSrchFn func, UStringSearch* search, const UChar* source,int32_t sourceLen, const UChar* pattern, int32_t patternLen) { 6685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fn = func; 6785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho src = source; 6885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho srcLen = sourceLen; 6985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrn = pattern; 7085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho pttrnLen = patternLen; 7185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho srch = search; 7285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 7385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 7485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 7585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 7685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass StringSearchPerformanceTest : public UPerfTest { 7785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprivate: 7885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const UChar* src; 7985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t srcLen; 8085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar* pttrn; 8185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t pttrnLen; 8285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TEST_BOYER_MOORE_SEARCH 8385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UnicodeString *targetString; 8485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho BoyerMooreSearch *bms; 8585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 8685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UStringSearch* srch; 8785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 8885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 8985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 9085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status); 9185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ~StringSearchPerformanceTest(); 9285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL); 9385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 9485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UPerfFunction* Test_ICU_Forward_Search(); 9585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 9685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UPerfFunction* Test_ICU_Backward_Search(); 9785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 9885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 9985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 10085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifdef TEST_BOYER_MOORE_SEARCH 10185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid ICUForwardSearch(BoyerMooreSearch *bms, const UChar *source, int32_t sourceLen, const UChar *pattern, int32_t patternLen, UErrorCode * /*status*/) { 10285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t offset = 0, start = -1, end = -1; 10385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 10485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho while (bms->search(offset, start, end)) { 10585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho offset = end; 10685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 10785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 10885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 10985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid ICUBackwardSearch(BoyerMooreSearch *bms, const UChar *source, int32_t sourceLen, const UChar *pattern, int32_t patternLen, UErrorCode * /*status*/) { 11085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t offset = 0, start = -1, end = -1; 11185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 11285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* NOTE: No Boyer-Moore backward search yet... */ 11385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho while (bms->search(offset, start, end)) { 11485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho offset = end; 11585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 11685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 11785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 11885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid ICUForwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) { 11985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t match; 12085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 12185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho match = usearch_first(srch, status); 12285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho while (match != USEARCH_DONE) { 12385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho match = usearch_next(srch, status); 12485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 12585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 12685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 12785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid ICUBackwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) { 12885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t match; 12985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 13085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho match = usearch_last(srch, status); 13185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho while (match != USEARCH_DONE) { 13285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho match = usearch_previous(srch, status); 13385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 13485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 13585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 13685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 13785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif /* _STRSRCHPERF_H */ 138