1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* Copyright (c) 2002-2011, International Business Machines 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef _STRINGPERF_H 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define _STRINGPERF_H 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/unistr.h" 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uperf.h" 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 15b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include <string.h> 16b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include <stdio.h> 17b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include <stdlib.h> 18b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef std::wstring stlstring; 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Define all constants for test case operations */ 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAXNUMLINES 40000 //Max number of lines in a test data file 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAXSRCLEN 20 //Max length of one line. maybe a larger number, but it need more mem 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOOPS 100 //Iterations 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//#define LOOPS 10 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define catenate_STRLEN 2 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst UChar uTESTCHAR1 = 'a'; 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst wchar_t wTESTCHAR1 = 'a'; 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst UnicodeString uEMPTY; 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst stlstring sEMPTY; 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString unistr; 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustlstring stlstr; 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// Simulate construction with a single-char string for basic_string 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruwchar_t simulate[2]={wTESTCHAR1, 0}; 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Constants for scan operation */ 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_STRING_DECL(scan_STRING, "Dot. 123. Some more data.", 25); 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst UnicodeString uScan_STRING=UnicodeString(scan_STRING); 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst stlstring sScan_STRING=stlstring(L"Dot. 123. Some more data."); 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* global variables or constants for concatenation operation */ 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_STRING_DECL(uCatenate_STR, "!!", 2); 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst stlstring sCatenate_STR=stlstring(L"!!"); 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UnicodeString* catICU; 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic stlstring* catStd; 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUBool bCatenatePrealloc; 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* type defines */ 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct WLine WLine; 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustruct WLine { 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wchar_t name[100]; 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len; 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; //struct to store one line of wchar_t string 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruenum FnType { Fn_ICU, Fn_STD }; 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef FnType FnType; 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef void (*ICUStringPerfFn)(const UChar* src,int32_t srcLen, UnicodeString s0); 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef void (*StdStringPerfFn)(const wchar_t* src,int32_t srcLen, stlstring s0); 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass StringPerfFunction : public UPerfFunction 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual long getEventsPerIteration(){ 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int loops = LOOPS; 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (catICU) { delete catICU;} 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (catStd) { delete catStd;} 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (bCatenatePrealloc) { 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int to_alloc = loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN); 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catICU = new UnicodeString(to_alloc,'a',0); 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //catICU = new UnicodeString(); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catStd = new stlstring(); 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //catStd -> reserve(loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN)); 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catStd -> reserve(110000000); 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catICU = new UnicodeString(); 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catStd = new stlstring(); 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return -1; 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual void call(UErrorCode* status) 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(line_mode_==TRUE){ 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(uselen_){ 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(int32_t i = 0; i< numLines_; i++){ 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (fnType_==Fn_ICU) { 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (*fn1_)(lines_[i].name,lines_[i].len,uS0_[i]); 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (*fn2_)(wlines_[i].name,wlines_[i].len,sS0_[i]); 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else{ 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(int32_t i = 0; i< numLines_; i++){ 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (fnType_==Fn_ICU) { 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (*fn1_)(lines_[i].name,-1,uS0_[i]); 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (*fn2_)(wlines_[i].name,-1,sS0_[i]); 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else{ 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(uselen_){ 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (fnType_==Fn_ICU) { 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (*fn1_)(src_,srcLen_,*ubulk_); 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (*fn2_)(wsrc_,wsrcLen_,*sbulk_); 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else{ 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (fnType_==Fn_ICU) { 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (*fn1_)(src_,-1,*ubulk_); 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (*fn2_)(wsrc_,-1,*sbulk_); 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual long getOperationsPerIteration() 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(line_mode_==TRUE){ 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return numLines_; 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else{ 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 1; 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru StringPerfFunction(ICUStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen) 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fn1_ = func; 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lines_=srcLines; 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wlines_=NULL; 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru numLines_=srcNumLines; 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uselen_=uselen; 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru line_mode_=TRUE; 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru src_ = NULL; 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru srcLen_ = 0; 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrc_ = NULL; 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrcLen_ = 0; 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fnType_ = Fn_ICU; 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uS0_=new UnicodeString[numLines_]; 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(int32_t i=0; i<numLines_; i++) { 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uS0_[i]=UnicodeString(lines_[i].name, lines_[i].len); 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sS0_=NULL; 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ubulk_=NULL; 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sbulk_=NULL; 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru StringPerfFunction(StdStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen) 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fn2_ = func; 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lines_=srcLines; 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wlines_=NULL; 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru numLines_=srcNumLines; 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uselen_=uselen; 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru line_mode_=TRUE; 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru src_ = NULL; 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru srcLen_ = 0; 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrc_ = NULL; 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrcLen_ = 0; 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fnType_ = Fn_STD; 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uS0_=NULL; 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ubulk_=NULL; 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sbulk_=NULL; 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //fillin wlines_[], sS0_[] 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru prepareLinesForStd(); 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru StringPerfFunction(ICUStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen) 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fn1_ = func; 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lines_=NULL; 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wlines_=NULL; 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru numLines_=0; 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uselen_=uselen; 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru line_mode_=FALSE; 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru src_ = new UChar[sourceLen]; 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR); 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru srcLen_ = sourceLen; 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrc_ = NULL; 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrcLen_ = 0; 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fnType_ = Fn_ICU; 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uS0_=NULL; 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sS0_=NULL; 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ubulk_=new UnicodeString(src_,srcLen_); 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sbulk_=NULL; 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru StringPerfFunction(StdStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen) 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fn2_ = func; 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lines_=NULL; 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wlines_=NULL; 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru numLines_=0; 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uselen_=uselen; 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru line_mode_=FALSE; 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru src_ = new UChar[sourceLen]; 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR); 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru srcLen_ = sourceLen; 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fnType_ = Fn_STD; 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uS0_=NULL; 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sS0_=NULL; 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ubulk_=NULL; 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //fillin wsrc_, sbulk_ 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru prepareBulkForStd(); 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ~StringPerfFunction() 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //free(src_); 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru free(wsrc_); 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete[] src_; 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ubulk_; 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete sbulk_; 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete[] uS0_; 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete[] sS0_; 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete[] wlines_; 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate: 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void prepareLinesForStd(void) 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode err=U_ZERO_ERROR; 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wlines_=new WLine[numLines_]; 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wchar_t ws[100]; 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t wcap = sizeof(ws) / sizeof(*ws); 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t wl; 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wchar_t* wcs; 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sS0_=new stlstring[numLines_]; 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(int32_t i=0; i<numLines_; i++) { 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(uselen_) { 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len, &err); 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru memcpy(wlines_[i].name, wcs, wl * sizeof(wchar_t)); 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wlines_[i].len = wl; 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len); 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len-1, &err); 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru memcpy(wlines_[i].name, wcs, wl*sizeof(wchar_t)); 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wlines_[i].len = wl; 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len+1); 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(err)) { 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void prepareBulkForStd(void) 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode err=U_ZERO_ERROR; 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar* uSrc = src_; 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t uSrcLen = srcLen_; 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wchar_t* wDest = NULL; 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t wDestLen = 0; 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t reqLen= 0 ; 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(uselen_) { 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* pre-flight*/ 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err); 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(err == U_BUFFER_OVERFLOW_ERROR){ 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err=U_ZERO_ERROR; 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen)); 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wDestLen = reqLen; 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err); 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(err)) { 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrc_ = wDest; 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrcLen_ = wDestLen; 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sbulk_=new stlstring(wsrc_,wsrcLen_); 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* pre-flight*/ 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(err == U_BUFFER_OVERFLOW_ERROR){ 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err=U_ZERO_ERROR; 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1)); 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wDestLen = reqLen+1; 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(err)) { 309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrc_ = wDest; 310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wsrcLen_ = wDestLen; 311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sbulk_=new stlstring(wsrc_); 312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //free(wDest); 316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate: 320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUStringPerfFn fn1_; 321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru StdStringPerfFn fn2_; 322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ULine* lines_; 324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru WLine* wlines_; 325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t numLines_; 326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool uselen_; 328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar* src_; 329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t srcLen_; 330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru wchar_t* wsrc_; 331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t wsrcLen_; 332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool line_mode_; 333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //added for preparing testing data 335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* uS0_; 336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstring* sS0_; 337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* ubulk_; 338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstring* sbulk_; 339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru FnType fnType_; 340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass StringPerformanceTest : public UPerfTest 344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru StringPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status); 347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ~StringPerformanceTest(); 348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, 349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *&name, 350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *par = NULL); 351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestCtor(); 352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestCtor1(); 353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestCtor2(); 354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestCtor3(); 355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestAssign(); 356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestAssign1(); 357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestAssign2(); 358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestGetch(); 359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestCatenate(); 360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestScan(); 361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestScan1(); 362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestScan2(); 363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibCtor(); 365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibCtor1(); 366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibCtor2(); 367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibCtor3(); 368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibAssign(); 369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibAssign1(); 370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibAssign2(); 371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibGetch(); 372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibCatenate(); 373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibScan(); 374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibScan1(); 375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UPerfFunction* TestStdLibScan2(); 376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate: 378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru long COUNT_; 379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ULine* filelines_; 380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar* StrBuffer; 381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t StrBufferLen; 382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void ctor(const UChar* src,int32_t srcLen, UnicodeString s0) 387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString a; 389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void ctor1(const UChar* src,int32_t srcLen, UnicodeString s0) 392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString b(uTESTCHAR1); 394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void ctor2(const UChar* src,int32_t srcLen, UnicodeString s0) 397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString c(uEMPTY); 399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void ctor3(const UChar* src,int32_t srcLen, UnicodeString s0) 402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString d(src,srcLen); 404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline UnicodeString icu_assign_helper(const UChar* src,int32_t srcLen) 407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (srcLen==-1) { return src;} 409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else { return UnicodeString(src, srcLen);} 410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void assign(const UChar* src,int32_t srcLen, UnicodeString s0) 413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru unistr = icu_assign_helper(src,srcLen); 415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void assign1(const UChar* src,int32_t srcLen, UnicodeString s0) 418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru unistr.setTo(src, srcLen); 420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void assign2(const UChar* src,int32_t srcLen, UnicodeString s0) 423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru unistr = s0; 425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void getch(const UChar* src,int32_t srcLen, UnicodeString s0) 428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru s0.charAt(0); 430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void catenate(const UChar* src,int32_t srcLen, UnicodeString s0) 434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UTimer mystart, mystop; 436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utimer_getTime(&mystart); 437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *catICU += s0; 439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utimer_getTime(&mystop); 441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru double mytime = utimer_getDeltaSeconds(&mystart,&mystop); 442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru printf("\nmytime=%f \n", mytime); 443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *catICU += uCatenate_STR; 445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvolatile int scan_idx; 448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_STRING_DECL(SCAN1, "123", 3); 449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void scan(const UChar* src,int32_t srcLen, UnicodeString s0) 451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar c='.'; 453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru scan_idx = uScan_STRING.indexOf(c); 454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void scan1(const UChar* src,int32_t srcLen, UnicodeString s0) 457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru scan_idx = uScan_STRING.indexOf(SCAN1,3); 459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void scan2(const UChar* src,int32_t srcLen, UnicodeString s0) 462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar c1='s'; 464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar c2='m'; 465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru scan_idx = uScan_STRING.indexOf(c1); 466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru scan_idx = uScan_STRING.indexOf(c2); 467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 469ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 470ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibCtor(const wchar_t* src,int32_t srcLen, stlstring s0) 471ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 472ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstring a; 473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 474ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 475ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibCtor1(const wchar_t* src,int32_t srcLen, stlstring s0) 476ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 477ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstring b(simulate); 478ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 479ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibCtor2(const wchar_t* src,int32_t srcLen, stlstring s0) 481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 482ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstring c(sEMPTY); 483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 484ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibCtor3(const wchar_t* src,int32_t srcLen, stlstring s0) 486ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 487ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (srcLen==-1) { 488ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstring d(src); 489ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else { 490ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstring d(src, srcLen); 491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline stlstring stl_assign_helper(const wchar_t* src,int32_t srcLen) 495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (srcLen==-1) { return src;} 497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else { return stlstring(src, srcLen);} 498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibAssign(const wchar_t* src,int32_t srcLen, stlstring s0) 501ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstr = stl_assign_helper(src,srcLen); 503ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 504ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 505ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibAssign1(const wchar_t* src,int32_t srcLen, stlstring s0) 506ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 507ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (srcLen==-1) { stlstr=src;} 508ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else { stlstr.assign(src, srcLen);} 509ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 510ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 511ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibAssign2(const wchar_t* src,int32_t srcLen, stlstring s0) 512ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 513ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru stlstr=s0; 514ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 515ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 516ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibGetch(const wchar_t* src,int32_t srcLen, stlstring s0) 517ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 518ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru s0.at(0); 519ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 520ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 521ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibCatenate(const wchar_t* src,int32_t srcLen, stlstring s0) 522ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 523ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UTimer mystart, mystop; 524ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utimer_getTime(&mystart); 525ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 526ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *catStd += s0; 527ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *catStd += sCatenate_STR; 528ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 529ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utimer_getTime(&mystop); 530ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru double mytime = utimer_getDeltaSeconds(&mystart,&mystop); 531ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru printf("\nmytime=%f \n", mytime); 532ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 533ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 534ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 535ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibScan(const wchar_t* src,int32_t srcLen, stlstring s0) 536ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 537ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru scan_idx = (int) sScan_STRING.find('.'); 538ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 539ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 540ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibScan1(const wchar_t* src,int32_t srcLen, stlstring s0) 541ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 542ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru scan_idx = (int) sScan_STRING.find(L"123"); 543ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 544ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 545ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void StdLibScan2(const wchar_t* src,int32_t srcLen, stlstring s0) 546ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 547ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru scan_idx = (int) sScan_STRING.find_first_of(L"sm"); 548ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 549ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 550ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif // STRINGPERF_H 551ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 552