| OLD | NEW |
| (Empty) |
| 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, 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 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& sta
tus); | |
| 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 | |
| OLD | NEW |