OLD | NEW |
(Empty) | |
| 1 /* |
| 2 ********************************************************************** |
| 3 * Copyright (c) 2002-2005, 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, int3
2_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 fi
le_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 fi
le_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 #ifdef U_DARWIN |
| 108 public: |
| 109 virtual void call(UErrorCode *status) {}; |
| 110 #else |
| 111 public: |
| 112 virtual void call(UErrorCode *status) {}; |
| 113 #endif |
| 114 }; |
| 115 |
| 116 class BreakIteratorPerformanceTest : public UPerfTest { |
| 117 private: |
| 118 const char* m_mode_; |
| 119 const UChar* m_file_; |
| 120 int32_t m_fileLen_; |
| 121 |
| 122 public: |
| 123 BreakIteratorPerformanceTest(int32_t argc, const char* argv[], UErrorCode& sta
tus); |
| 124 ~BreakIteratorPerformanceTest(); |
| 125 |
| 126 virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, |
| 127 const char* &name, char* par = NULL); |
| 128 |
| 129 UPerfFunction* TestICUForward(); |
| 130 UPerfFunction* TestICUIsBound(); |
| 131 |
| 132 UPerfFunction* TestDarwinForward(); |
| 133 UPerfFunction* TestDarwinIsBound(); |
| 134 |
| 135 }; |
| 136 |
| 137 #endif // UBRKPERF_H |
OLD | NEW |