]> git.saurik.com Git - apple/icu.git/blob - icuSources/test/perf/ubrkperf/ubrkperf.h
ICU-531.48.tar.gz
[apple/icu.git] / icuSources / test / perf / ubrkperf / ubrkperf.h
1 /*
2 **********************************************************************
3 * Copyright (c) 2002-2011, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 **********************************************************************
6 **********************************************************************
7 */
8 #ifndef _UBRKPERF_H
9 #define _UBRKPERF_H
10
11 #include "unicode/uperf.h"
12
13 #include <unicode/brkiter.h>
14
15 class ICUBreakFunction : public UPerfFunction {
16 protected:
17 BreakIterator *m_brkIt_;
18 const UChar *m_file_;
19 int32_t m_fileLen_;
20 int32_t m_noBreaks_;
21 UErrorCode m_status_;
22 public:
23 ICUBreakFunction(const char *locale, const char *mode, const UChar *file, int32_t file_len) :
24 m_brkIt_(NULL),
25 m_file_(file),
26 m_fileLen_(file_len),
27 m_noBreaks_(-1),
28 m_status_(U_ZERO_ERROR)
29 {
30 switch(mode[0]) {
31 case 'c' :
32 m_brkIt_ = BreakIterator::createCharacterInstance(locale, m_status_);
33 break;
34 case 'w' :
35 m_brkIt_ = BreakIterator::createWordInstance(locale, m_status_);
36 break;
37 case 'l' :
38 m_brkIt_ = BreakIterator::createLineInstance(locale, m_status_);
39 break;
40 case 's' :
41 m_brkIt_ = BreakIterator::createSentenceInstance(locale, m_status_);
42 break;
43 default:
44 // should not happen as we already check for this in the caller
45 m_status_ = U_ILLEGAL_ARGUMENT_ERROR;
46 break;
47 }
48 }
49
50 ~ICUBreakFunction() { delete m_brkIt_; }
51 virtual void call(UErrorCode *status) = 0;
52 virtual long getOperationsPerIteration() { return m_fileLen_; }
53 virtual long getEventsPerIteration() { return m_noBreaks_; }
54 virtual UErrorCode getStatus() { return m_status_; }
55 };
56
57 class ICUIsBound : public ICUBreakFunction {
58 public:
59 ICUIsBound(const char *locale, const char *mode, const UChar *file, int32_t file_len) :
60 ICUBreakFunction(locale, mode, file, file_len)
61 {
62 m_noBreaks_ = 0;
63 m_brkIt_->setText(UnicodeString(m_file_, m_fileLen_));
64 m_brkIt_->first();
65 int32_t j = 0;
66 for(j = 0; j < m_fileLen_; j++) {
67 if(m_brkIt_->isBoundary(j)) {
68 m_noBreaks_++;
69 }
70 }
71 }
72 virtual void call(UErrorCode *status)
73 {
74 m_noBreaks_ = 0;
75 int32_t j = 0;
76 for(j = 0; j < m_fileLen_; j++) {
77 if(m_brkIt_->isBoundary(j)) {
78 m_noBreaks_++;
79 }
80 }
81 }
82 };
83
84 class ICUForward : public ICUBreakFunction {
85 public:
86 ICUForward(const char *locale, const char *mode, const UChar *file, int32_t file_len) :
87 ICUBreakFunction(locale, mode, file, file_len)
88 {
89 m_noBreaks_ = 0;
90 m_brkIt_->setText(UnicodeString(m_file_, m_fileLen_));
91 m_brkIt_->first();
92 while(m_brkIt_->next() != BreakIterator::DONE) {
93 m_noBreaks_++;
94 }
95 }
96 virtual void call(UErrorCode *status)
97 {
98 m_noBreaks_ = 0;
99 m_brkIt_->first();
100 while(m_brkIt_->next() != BreakIterator::DONE) {
101 m_noBreaks_++;
102 }
103 }
104 };
105
106 class DarwinBreakFunction : public UPerfFunction {
107 public:
108 virtual void call(UErrorCode *status) {};
109 };
110
111 class BreakIteratorPerformanceTest : public UPerfTest {
112 private:
113 const char* m_mode_;
114 const UChar* m_file_;
115 int32_t m_fileLen_;
116
117 public:
118 BreakIteratorPerformanceTest(int32_t argc, const char* argv[], UErrorCode& status);
119 ~BreakIteratorPerformanceTest();
120
121 virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec,
122 const char* &name, char* par = NULL);
123
124 UPerfFunction* TestICUForward();
125 UPerfFunction* TestICUIsBound();
126
127 UPerfFunction* TestDarwinForward();
128 UPerfFunction* TestDarwinIsBound();
129
130 };
131
132 #endif // UBRKPERF_H