| /* |
| ********************************************************************** |
| * Copyright (c) 2002-2006, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| ********************************************************************** |
| ********************************************************************** |
| */ |
| #ifndef _CHARPERF_H |
| #define _CHARPERF_H |
| |
| #include "unicode/uchar.h" |
| |
| #include "unicode/uperf.h" |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <wchar.h> |
| #include <wctype.h> |
| |
| typedef void (*CharPerfFn)(UChar32 ch); |
| typedef void (*StdLibCharPerfFn)(wchar_t ch); |
| |
| class CharPerfFunction : public UPerfFunction |
| { |
| public: |
| virtual void call(UErrorCode* status) |
| { |
| for (UChar32 i = MIN_; i < MAX_; i ++) { |
| (*m_fn_)(i); |
| } |
| } |
| |
| virtual long getOperationsPerIteration() |
| { |
| return MAX_ - MIN_; |
| } |
| CharPerfFunction(CharPerfFn func, UChar32 min, UChar32 max) |
| { |
| m_fn_ = func; |
| MIN_ = min; |
| MAX_ = max; |
| } |
| |
| private: |
| CharPerfFn m_fn_; |
| UChar32 MIN_; |
| UChar32 MAX_; |
| }; |
| |
| class StdLibCharPerfFunction : public UPerfFunction |
| { |
| public: |
| virtual void call(UErrorCode* status) |
| { |
| // note wchar_t is unsigned, it will revert to 0 once it reaches |
| // 65535 |
| for (wchar_t i = MIN_; i < MAX_; i ++) { |
| (*m_fn_)(i); |
| } |
| } |
| |
| virtual long getOperationsPerIteration() |
| { |
| return MAX_ - MIN_; |
| } |
| |
| StdLibCharPerfFunction(StdLibCharPerfFn func, wchar_t min, wchar_t max) |
| { |
| m_fn_ = func; |
| MIN_ = min; |
| MAX_ = max; |
| } |
| |
| ~StdLibCharPerfFunction() |
| { |
| } |
| |
| private: |
| StdLibCharPerfFn m_fn_; |
| wchar_t MIN_; |
| wchar_t MAX_; |
| }; |
| |
| class CharPerformanceTest : public UPerfTest |
| { |
| public: |
| CharPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status); |
| ~CharPerformanceTest(); |
| virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, |
| const char *&name, |
| char *par = NULL); |
| UPerfFunction* TestIsAlpha(); |
| UPerfFunction* TestIsUpper(); |
| UPerfFunction* TestIsLower(); |
| UPerfFunction* TestIsDigit(); |
| UPerfFunction* TestIsSpace(); |
| UPerfFunction* TestIsAlphaNumeric(); |
| UPerfFunction* TestIsPrint(); |
| UPerfFunction* TestIsControl(); |
| UPerfFunction* TestToLower(); |
| UPerfFunction* TestToUpper(); |
| UPerfFunction* TestIsWhiteSpace(); |
| UPerfFunction* TestStdLibIsAlpha(); |
| UPerfFunction* TestStdLibIsUpper(); |
| UPerfFunction* TestStdLibIsLower(); |
| UPerfFunction* TestStdLibIsDigit(); |
| UPerfFunction* TestStdLibIsSpace(); |
| UPerfFunction* TestStdLibIsAlphaNumeric(); |
| UPerfFunction* TestStdLibIsPrint(); |
| UPerfFunction* TestStdLibIsControl(); |
| UPerfFunction* TestStdLibToLower(); |
| UPerfFunction* TestStdLibToUpper(); |
| UPerfFunction* TestStdLibIsWhiteSpace(); |
| |
| private: |
| UChar32 MIN_; |
| UChar32 MAX_; |
| }; |
| |
| inline void isAlpha(UChar32 ch) |
| { |
| u_isalpha(ch); |
| } |
| |
| inline void isUpper(UChar32 ch) |
| { |
| u_isupper(ch); |
| } |
| |
| inline void isLower(UChar32 ch) |
| { |
| u_islower(ch); |
| } |
| |
| inline void isDigit(UChar32 ch) |
| { |
| u_isdigit(ch); |
| } |
| |
| inline void isSpace(UChar32 ch) |
| { |
| u_isspace(ch); |
| } |
| |
| inline void isAlphaNumeric(UChar32 ch) |
| { |
| u_isalnum(ch); |
| } |
| |
| /** |
| * This test may be different since c lib has a type PUNCT and it is printable. |
| * iswgraph is not used for testing since it is a subset of iswprint with the |
| * exception of returning true for white spaces. no match found in icu4c. |
| */ |
| inline void isPrint(UChar32 ch) |
| { |
| u_isprint(ch); |
| } |
| |
| inline void isControl(UChar32 ch) |
| { |
| u_iscntrl(ch); |
| } |
| |
| inline void toLower(UChar32 ch) |
| { |
| u_tolower(ch); |
| } |
| |
| inline void toUpper(UChar32 ch) |
| { |
| u_toupper(ch); |
| } |
| |
| inline void isWhiteSpace(UChar32 ch) |
| { |
| u_isWhitespace(ch); |
| } |
| |
| inline void StdLibIsAlpha(wchar_t ch) |
| { |
| iswalpha(ch); |
| } |
| |
| inline void StdLibIsUpper(wchar_t ch) |
| { |
| iswupper(ch); |
| } |
| |
| inline void StdLibIsLower(wchar_t ch) |
| { |
| iswlower(ch); |
| } |
| |
| inline void StdLibIsDigit(wchar_t ch) |
| { |
| iswdigit(ch); |
| } |
| |
| inline void StdLibIsSpace(wchar_t ch) |
| { |
| iswspace(ch); |
| } |
| |
| inline void StdLibIsAlphaNumeric(wchar_t ch) |
| { |
| iswalnum(ch); |
| } |
| |
| /** |
| * This test may be different since c lib has a type PUNCT and it is printable. |
| * iswgraph is not used for testing since it is a subset of iswprint with the |
| * exception of returning true for white spaces. no match found in icu4c. |
| */ |
| inline void StdLibIsPrint(wchar_t ch) |
| { |
| iswprint(ch); |
| } |
| |
| inline void StdLibIsControl(wchar_t ch) |
| { |
| iswcntrl(ch); |
| } |
| |
| inline void StdLibToLower(wchar_t ch) |
| { |
| towlower(ch); |
| } |
| |
| inline void StdLibToUpper(wchar_t ch) |
| { |
| towupper(ch); |
| } |
| |
| inline void StdLibIsWhiteSpace(wchar_t ch) |
| { |
| iswspace(ch); |
| } |
| |
| #endif // CHARPERF_H |