1f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle/* 262f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle********************************************************************** 3f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle* Copyright (c) 2002-2011, International Business Machines 4f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle* Corporation and others. All Rights Reserved. 5f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle********************************************************************** 6f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle*/ 7f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#ifndef _STRINGPERF_H 8f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#define _STRINGPERF_H 9f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 10f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#include "unicode/utypes.h" 11f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#include "unicode/unistr.h" 12f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 13f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#include "unicode/uperf.h" 14f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 15f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#include <string.h> 16f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#include <stdio.h> 17f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#include <stdlib.h> 18f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 19f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalletypedef std::wstring stlstring; 20f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 21f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle/* Define all constants for test case operations */ 220c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle#define MAXNUMLINES 40000 //Max number of lines in a test data file 23c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle#define MAXSRCLEN 20 //Max length of one line. maybe a larger number, but it need more mem 248639f6266cb70bf92d1561af43ac2d7b2b97298eJeff Davidson#define LOOPS 100 //Iterations 25c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle//#define LOOPS 10 26f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle#define catenate_STRLEN 2 27f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 280c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalleconst UChar uTESTCHAR1 = 'a'; 29f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleconst wchar_t wTESTCHAR1 = 'a'; 30f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleconst UnicodeString uEMPTY; 31f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleconst stlstring sEMPTY; 32f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleUnicodeString unistr; 33f22d23092ab37286a5ef9d257d5bb32c421d2669vandwallestlstring stlstr; 34f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle// Simulate construction with a single-char string for basic_string 35f22d23092ab37286a5ef9d257d5bb32c421d2669vandwallewchar_t simulate[2]={wTESTCHAR1, 0}; 36f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 37f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle/* Constants for scan operation */ 38f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleU_STRING_DECL(scan_STRING, "Dot. 123. Some more data.", 25); 39f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleconst UnicodeString uScan_STRING=UnicodeString(scan_STRING); 40f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleconst stlstring sScan_STRING=stlstring(L"Dot. 123. Some more data."); 41f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 42f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle/* global variables or constants for concatenation operation */ 43f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleU_STRING_DECL(uCatenate_STR, "!!", 2); 44f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleconst stlstring sCatenate_STR=stlstring(L"!!"); 45f22d23092ab37286a5ef9d257d5bb32c421d2669vandwallestatic UnicodeString* catICU; 46f22d23092ab37286a5ef9d257d5bb32c421d2669vandwallestatic stlstring* catStd; 47f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleUBool bCatenatePrealloc; 48f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 49f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle/* type defines */ 50ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalletypedef struct WLine WLine; 51ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwallestruct WLine { 52f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wchar_t name[100]; 53f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle int32_t len; 54c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle}; //struct to store one line of wchar_t string 55833dcce8f6712f7594f06ea33208e3e106c15afcvandwalle 56c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalleenum FnType { Fn_ICU, Fn_STD }; 57453aee50caf7e332e77ab3d995d7c87a958e4fd4vandwalletypedef FnType FnType; 58f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalletypedef void (*ICUStringPerfFn)(const UChar* src,int32_t srcLen, UnicodeString s0); 59f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalletypedef void (*StdStringPerfFn)(const wchar_t* src,int32_t srcLen, stlstring s0); 60f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 61f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 62c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalleclass StringPerfFunction : public UPerfFunction 63c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle{ 648639f6266cb70bf92d1561af43ac2d7b2b97298eJeff Davidsonpublic: 658639f6266cb70bf92d1561af43ac2d7b2b97298eJeff Davidson 668639f6266cb70bf92d1561af43ac2d7b2b97298eJeff Davidson virtual long getEventsPerIteration(){ 67c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle int loops = LOOPS; 68c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle if (catICU) { delete catICU;} 69c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle if (catStd) { delete catStd;} 70c290d8dff6172d5fde7b9dfd74d3a20785dab246vandwalle 71c290d8dff6172d5fde7b9dfd74d3a20785dab246vandwalle if (bCatenatePrealloc) { 72c290d8dff6172d5fde7b9dfd74d3a20785dab246vandwalle 73931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle int to_alloc = loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN); 744dc6f3a322806b25d50039614cde1b94fe91ab17vandwalle catICU = new UnicodeString(to_alloc,'a',0); 75931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle //catICU = new UnicodeString(); 764dc6f3a322806b25d50039614cde1b94fe91ab17vandwalle 7727355a942653264388e909a4276196ee63e57811vandwalle catStd = new stlstring(); 78b97e66604f472f67c233bb8f8d9630bb36131e2cvandwalle //catStd -> reserve(loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN)); 79b97e66604f472f67c233bb8f8d9630bb36131e2cvandwalle catStd -> reserve(110000000); 80b97e66604f472f67c233bb8f8d9630bb36131e2cvandwalle } else { 81b97e66604f472f67c233bb8f8d9630bb36131e2cvandwalle catICU = new UnicodeString(); 82b97e66604f472f67c233bb8f8d9630bb36131e2cvandwalle catStd = new stlstring(); 8397b9c4fef6e372d1f19b333c7a67ff27ef80baf0vandwalle } 8497b9c4fef6e372d1f19b333c7a67ff27ef80baf0vandwalle 851ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle return -1; 861ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle } 871ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle 881ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle virtual void call(UErrorCode* status) 891ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle { 901ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle if(line_mode_==TRUE){ 911ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle if(uselen_){ 921ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle for(int32_t i = 0; i< numLines_; i++){ 931ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle if (fnType_==Fn_ICU) { 941ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle (*fn1_)(lines_[i].name,lines_[i].len,uS0_[i]); 951ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle } else { 961ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle (*fn2_)(wlines_[i].name,wlines_[i].len,sS0_[i]); 971ec92c57244311c7fca3ab6b244a06c2b2b58902vandwalle } 98f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 99c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle }else{ 100f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle for(int32_t i = 0; i< numLines_; i++){ 101f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle if (fnType_==Fn_ICU) { 102f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle (*fn1_)(lines_[i].name,-1,uS0_[i]); 103f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } else { 104f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle (*fn2_)(wlines_[i].name,-1,sS0_[i]); 105c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle } 10621bc54cb37a0085b1c909cb4d55ebb12a2facefbvandwalle } 10721bc54cb37a0085b1c909cb4d55ebb12a2facefbvandwalle } 108f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle }else{ 109f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle if(uselen_){ 110f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle if (fnType_==Fn_ICU) { 111f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle (*fn1_)(src_,srcLen_,*ubulk_); 112f13817203179f41620514718c8668ae7e418f8afJeff Davidson } else { 113f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle (*fn2_)(wsrc_,wsrcLen_,*sbulk_); 114f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 115f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle }else{ 116f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle if (fnType_==Fn_ICU) { 117f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle (*fn1_)(src_,-1,*ubulk_); 118f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } else { 119f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle (*fn2_)(wsrc_,-1,*sbulk_); 120f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 121f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 122ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalle } 123ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalle } 124abde872adced15dfb6781fb71959453d963326dbYuhao Zheng 125ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalle virtual long getOperationsPerIteration() 126ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalle { 127abde872adced15dfb6781fb71959453d963326dbYuhao Zheng if(line_mode_==TRUE){ 128ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalle return numLines_; 129ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalle }else{ 130ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalle return 1; 131ed9938883ae2dade81c8be6cd6ceaef3febd5239vandwalle } 132931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle } 133931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle 134ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle StringPerfFunction(ICUStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen) 135931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle { 136f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 137f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle fn1_ = func; 138931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle lines_=srcLines; 139f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wlines_=NULL; 140b97e66604f472f67c233bb8f8d9630bb36131e2cvandwalle numLines_=srcNumLines; 141f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle uselen_=uselen; 142f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle line_mode_=TRUE; 143f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle src_ = NULL; 144f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle srcLen_ = 0; 145f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wsrc_ = NULL; 146f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wsrcLen_ = 0; 147f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle fnType_ = Fn_ICU; 148f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 149f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle uS0_=new UnicodeString[numLines_]; 150f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle for(int32_t i=0; i<numLines_; i++) { 151f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle uS0_[i]=UnicodeString(lines_[i].name, lines_[i].len); 152f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 153f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle sS0_=NULL; 154f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle ubulk_=NULL; 155f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle sbulk_=NULL; 156f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 157be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle 158be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle StringPerfFunction(StdStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen) 159be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle { 1607b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle 1618242cc81341c80ab5bc057ffdad99a3a1d95be5cvandwalle fn2_ = func; 162f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle lines_=srcLines; 1630c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle wlines_=NULL; 1640c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle numLines_=srcNumLines; 165f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle uselen_=uselen; 1661fcf3c6d2b9ed65573e1e7c55fc5a30ebd364c4fYuhao Zheng line_mode_=TRUE; 167c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle src_ = NULL; 168c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle srcLen_ = 0; 169f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wsrc_ = NULL; 170f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wsrcLen_ = 0; 171c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle fnType_ = Fn_STD; 172f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 173f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle uS0_=NULL; 1748ccabb81ad304b80dc8eaa162fd322643461529bvandwalle ubulk_=NULL; 1758ccabb81ad304b80dc8eaa162fd322643461529bvandwalle sbulk_=NULL; 1768ccabb81ad304b80dc8eaa162fd322643461529bvandwalle 1778ccabb81ad304b80dc8eaa162fd322643461529bvandwalle //fillin wlines_[], sS0_[] 1788ccabb81ad304b80dc8eaa162fd322643461529bvandwalle prepareLinesForStd(); 1798ccabb81ad304b80dc8eaa162fd322643461529bvandwalle } 1808ccabb81ad304b80dc8eaa162fd322643461529bvandwalle 1818ccabb81ad304b80dc8eaa162fd322643461529bvandwalle StringPerfFunction(ICUStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen) 182931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle { 183c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle 184f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle fn1_ = func; 185c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle lines_=NULL; 186f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wlines_=NULL; 1878ccabb81ad304b80dc8eaa162fd322643461529bvandwalle numLines_=0; 1888ccabb81ad304b80dc8eaa162fd322643461529bvandwalle uselen_=uselen; 1898ccabb81ad304b80dc8eaa162fd322643461529bvandwalle line_mode_=FALSE; 1908ccabb81ad304b80dc8eaa162fd322643461529bvandwalle src_ = new UChar[sourceLen]; 191e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR); 192e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle srcLen_ = sourceLen; 193e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle wsrc_ = NULL; 194e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle wsrcLen_ = 0; 195e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle fnType_ = Fn_ICU; 196e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle 197e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle uS0_=NULL; 198e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle sS0_=NULL; 199e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle ubulk_=new UnicodeString(src_,srcLen_); 200e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle sbulk_=NULL; 201e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle } 202e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle 203e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle StringPerfFunction(StdStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen) 204e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle { 205e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle 206e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle fn2_ = func; 207e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle lines_=NULL; 208e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle wlines_=NULL; 2097b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle numLines_=0; 2107b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle uselen_=uselen; 2117b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle line_mode_=FALSE; 212e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle src_ = new UChar[sourceLen]; 2137b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR); 214e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle srcLen_ = sourceLen; 2150c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle fnType_ = Fn_STD; 216e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle 2177b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle uS0_=NULL; 2187b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle sS0_=NULL; 2197b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle ubulk_=NULL; 220e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle 221e8c89583e489d451880471b7cc7659bd9fa802f4vandwalle //fillin wsrc_, sbulk_ 2227b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle prepareBulkForStd(); 2230c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle 224f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 225f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 226e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle ~StringPerfFunction() 227e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle { 228be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle //free(src_); 2297b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle free(wsrc_); 230f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle delete[] src_; 231be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle delete ubulk_; 2327b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle delete sbulk_; 233be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle delete[] uS0_; 234c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle delete[] sS0_; 235c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle delete[] wlines_; 236f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 2371fcf3c6d2b9ed65573e1e7c55fc5a30ebd364c4fYuhao Zheng 238f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleprivate: 239f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle void prepareLinesForStd(void) 2408242cc81341c80ab5bc057ffdad99a3a1d95be5cvandwalle { 2418242cc81341c80ab5bc057ffdad99a3a1d95be5cvandwalle UErrorCode err=U_ZERO_ERROR; 2428242cc81341c80ab5bc057ffdad99a3a1d95be5cvandwalle 2438242cc81341c80ab5bc057ffdad99a3a1d95be5cvandwalle wlines_=new WLine[numLines_]; 2448242cc81341c80ab5bc057ffdad99a3a1d95be5cvandwalle wchar_t ws[100]; 245f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle int32_t wcap = sizeof(ws) / sizeof(*ws); 246be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle int32_t wl; 247be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle wchar_t* wcs; 2487b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle 249f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle sS0_=new stlstring[numLines_]; 2500d616ef3bf635dff8722e064c0be842676390ed8vandwalle for(int32_t i=0; i<numLines_; i++) { 2510d616ef3bf635dff8722e064c0be842676390ed8vandwalle if(uselen_) { 2520d616ef3bf635dff8722e064c0be842676390ed8vandwalle wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len, &err); 2530d616ef3bf635dff8722e064c0be842676390ed8vandwalle memcpy(wlines_[i].name, wcs, wl * sizeof(wchar_t)); 2540d616ef3bf635dff8722e064c0be842676390ed8vandwalle wlines_[i].len = wl; 255f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len); 2567b581f46f6c9bc6edf0edd287d47106712fb2144vandwalle } else { 257be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len-1, &err); 258a0708b09ad17b086c008ab100aec7143d7613c80vandwalle memcpy(wlines_[i].name, wcs, wl*sizeof(wchar_t)); 259a0708b09ad17b086c008ab100aec7143d7613c80vandwalle wlines_[i].len = wl; 260a0708b09ad17b086c008ab100aec7143d7613c80vandwalle sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len+1); 261be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle } 262f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 2630c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle if (U_FAILURE(err)) { 2640c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle return; 2650c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle } 2660c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle } 267931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle 2680c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle } 2690c8b99a3b78e458a5617cc449e2efe69c5bdd531vandwalle 270be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle void prepareBulkForStd(void) 271f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle { 272f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UErrorCode err=U_ZERO_ERROR; 273f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 2740888ce6f90bdaeee799dd8361ea4781e23a33b87vandwalle const UChar* uSrc = src_; 275ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle int32_t uSrcLen = srcLen_; 276ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle wchar_t* wDest = NULL; 277ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle int32_t wDestLen = 0; 278ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle int32_t reqLen= 0 ; 2792f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalle 280ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle if(uselen_) { 281ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle /* pre-flight*/ 282ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err); 283ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 284ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle if(err == U_BUFFER_OVERFLOW_ERROR){ 2852f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalle err=U_ZERO_ERROR; 286ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen)); 287f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wDestLen = reqLen; 288f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err); 289931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle } 290be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle 291be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle if (U_SUCCESS(err)) { 292e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle wsrc_ = wDest; 293be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle wsrcLen_ = wDestLen; 294f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle sbulk_=new stlstring(wsrc_,wsrcLen_); 295be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle } 296be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle 2972f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalle } else { 2989f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalle /* pre-flight*/ 299be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); 3007806f8c800754da0f76d7a0c1a6a590381dac7a8vandwalle 3017806f8c800754da0f76d7a0c1a6a590381dac7a8vandwalle if(err == U_BUFFER_OVERFLOW_ERROR){ 3027806f8c800754da0f76d7a0c1a6a590381dac7a8vandwalle err=U_ZERO_ERROR; 303005c1ef113192f898499a407dd266393a8d6b076vandwalle wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1)); 304be3095ed758fca076b9ccb9fdae48f7f865c078avandwalle wDestLen = reqLen+1; 305f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); 306f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 307f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 308931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle if (U_SUCCESS(err)) { 309931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle wsrc_ = wDest; 310f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wsrcLen_ = wDestLen; 311f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle sbulk_=new stlstring(wsrc_); 312f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 313f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 314f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 315f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle //free(wDest); 316f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle } 317f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 318f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 319f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleprivate: 320f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle ICUStringPerfFn fn1_; 321f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle StdStringPerfFn fn2_; 322005c1ef113192f898499a407dd266393a8d6b076vandwalle 323f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle ULine* lines_; 324f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle WLine* wlines_; 325931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle int32_t numLines_; 326931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle 327931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle UBool uselen_; 328931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle UChar* src_; 329f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle int32_t srcLen_; 330f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle wchar_t* wsrc_; 331f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle int32_t wsrcLen_; 332f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UBool line_mode_; 333931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle 334f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle //added for preparing testing data 335f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UnicodeString* uS0_; 336f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle stlstring* sS0_; 337f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UnicodeString* ubulk_; 338b57df70bdf17ba45ef4d18b11414cb24dcbe1fb9vandwalle stlstring* sbulk_; 339b57df70bdf17ba45ef4d18b11414cb24dcbe1fb9vandwalle FnType fnType_; 340931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle}; 341e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 342e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 343b97e66604f472f67c233bb8f8d9630bb36131e2cvandwalleclass StringPerformanceTest : public UPerfTest 344b57df70bdf17ba45ef4d18b11414cb24dcbe1fb9vandwalle{ 345b97e66604f472f67c233bb8f8d9630bb36131e2cvandwallepublic: 346f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle StringPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status); 347b57df70bdf17ba45ef4d18b11414cb24dcbe1fb9vandwalle ~StringPerformanceTest(); 348c290d8dff6172d5fde7b9dfd74d3a20785dab246vandwalle virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, 349c290d8dff6172d5fde7b9dfd74d3a20785dab246vandwalle const char *&name, 350b57df70bdf17ba45ef4d18b11414cb24dcbe1fb9vandwalle char *par = NULL); 351b57df70bdf17ba45ef4d18b11414cb24dcbe1fb9vandwalle UPerfFunction* TestCtor(); 352f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UPerfFunction* TestCtor1(); 353f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UPerfFunction* TestCtor2(); 354b57df70bdf17ba45ef4d18b11414cb24dcbe1fb9vandwalle UPerfFunction* TestCtor3(); 355f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UPerfFunction* TestAssign(); 356f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UPerfFunction* TestAssign1(); 357b664cfeab6f02e24376ea0a15beb83d142f0b14dvandwalle UPerfFunction* TestAssign2(); 358e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestGetch(); 359e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestCatenate(); 360b664cfeab6f02e24376ea0a15beb83d142f0b14dvandwalle UPerfFunction* TestScan(); 361833dcce8f6712f7594f06ea33208e3e106c15afcvandwalle UPerfFunction* TestScan1(); 362e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestScan2(); 363e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 364e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibCtor(); 365e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibCtor1(); 366e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibCtor2(); 367e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibCtor3(); 368e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibAssign(); 369e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibAssign1(); 370e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibAssign2(); 371e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibGetch(); 372e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibCatenate(); 373e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibScan(); 374e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibScan1(); 375e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UPerfFunction* TestStdLibScan2(); 376e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 377e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalleprivate: 378e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle long COUNT_; 379e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle ULine* filelines_; 380e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UChar* StrBuffer; 381e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle int32_t StrBufferLen; 382e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 383e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle}; 384e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 385e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 386e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalleinline void ctor(const UChar* src,int32_t srcLen, UnicodeString s0) 387e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle{ 388e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UnicodeString a; 389e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle} 390e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 391e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalleinline void ctor1(const UChar* src,int32_t srcLen, UnicodeString s0) 392e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle{ 393e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle UnicodeString b(uTESTCHAR1); 394e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle} 395e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle 396ede507649471f1113e9e1919812115ca5a6bc0c8vandwalleinline void ctor2(const UChar* src,int32_t srcLen, UnicodeString s0) 397f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle{ 398f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle UnicodeString c(uEMPTY); 399ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle} 400ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 401ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalleinline void ctor3(const UChar* src,int32_t srcLen, UnicodeString s0) 402ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle{ 403ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle UnicodeString d(src,srcLen); 404ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle} 40562f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle 406ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalleinline UnicodeString icu_assign_helper(const UChar* src,int32_t srcLen) 407ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle{ 408ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle if (srcLen==-1) { return src;} 409931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle else { return UnicodeString(src, srcLen);} 41062f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle} 411f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 412f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalleinline void assign(const UChar* src,int32_t srcLen, UnicodeString s0) 413c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle{ 414f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle unistr = icu_assign_helper(src,srcLen); 415f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle} 416f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 417e86c962bb99a8b126ed64ddcc6b112161549e26dvandwalleinline void assign1(const UChar* src,int32_t srcLen, UnicodeString s0) 418c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle{ 419c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle unistr.setTo(src, srcLen); 420e86c962bb99a8b126ed64ddcc6b112161549e26dvandwalle} 421e86c962bb99a8b126ed64ddcc6b112161549e26dvandwalle 422e86c962bb99a8b126ed64ddcc6b112161549e26dvandwalleinline void assign2(const UChar* src,int32_t srcLen, UnicodeString s0) 42362f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle{ 424931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle unistr = s0; 42562f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle} 42627355a942653264388e909a4276196ee63e57811vandwalle 42762f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalleinline void getch(const UChar* src,int32_t srcLen, UnicodeString s0) 428e0aa0a004d161173992a0e9af1b431fae91f4a71vandwalle{ 42962f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle s0.charAt(0); 430f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle} 431992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle 432f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 433ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalleinline void catenate(const UChar* src,int32_t srcLen, UnicodeString s0) 434f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle{ 435992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle UTimer mystart, mystop; 436992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle utimer_getTime(&mystart); 437f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 438ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle *catICU += s0; 439992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle 440992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle utimer_getTime(&mystop); 441f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle double mytime = utimer_getDeltaSeconds(&mystart,&mystop); 442f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle printf("\nmytime=%f \n", mytime); 443f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 444ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle *catICU += uCatenate_STR; 445ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle} 4462451dbcc4f9641df188326215b204b798eb70c46vandwalle 447c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwallevolatile int scan_idx; 4489f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalleU_STRING_DECL(SCAN1, "123", 3); 4499f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalle 4509f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalleinline void scan(const UChar* src,int32_t srcLen, UnicodeString s0) 4519f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalle{ 4529f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalle UChar c='.'; 4539f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalle scan_idx = uScan_STRING.indexOf(c); 4549f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalle} 4559f3349fa2cd39d690d1e2b7c3b71ced412e24f2cvandwalle 45662f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalleinline void scan1(const UChar* src,int32_t srcLen, UnicodeString s0) 45762f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle{ 458c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle scan_idx = uScan_STRING.indexOf(SCAN1,3); 459c298087de50ea56c31a4ade7ee1e83b313bb63c7vandwalle} 46062f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle 46162f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalleinline void scan2(const UChar* src,int32_t srcLen, UnicodeString s0) 462992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle{ 463992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle UChar c1='s'; 464992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle UChar c2='m'; 465992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle scan_idx = uScan_STRING.indexOf(c1); 466f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle scan_idx = uScan_STRING.indexOf(c2); 46762f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle} 468ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 46962f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle 47062f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalleinline void StdLibCtor(const wchar_t* src,int32_t srcLen, stlstring s0) 471f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle{ 4722451dbcc4f9641df188326215b204b798eb70c46vandwalle stlstring a; 4732451dbcc4f9641df188326215b204b798eb70c46vandwalle} 4742451dbcc4f9641df188326215b204b798eb70c46vandwalle 4752451dbcc4f9641df188326215b204b798eb70c46vandwalleinline void StdLibCtor1(const wchar_t* src,int32_t srcLen, stlstring s0) 4762451dbcc4f9641df188326215b204b798eb70c46vandwalle{ 4772451dbcc4f9641df188326215b204b798eb70c46vandwalle stlstring b(simulate); 4782451dbcc4f9641df188326215b204b798eb70c46vandwalle} 4792451dbcc4f9641df188326215b204b798eb70c46vandwalle 4802451dbcc4f9641df188326215b204b798eb70c46vandwalleinline void StdLibCtor2(const wchar_t* src,int32_t srcLen, stlstring s0) 4812451dbcc4f9641df188326215b204b798eb70c46vandwalle{ 4822451dbcc4f9641df188326215b204b798eb70c46vandwalle stlstring c(sEMPTY); 4832451dbcc4f9641df188326215b204b798eb70c46vandwalle} 4842451dbcc4f9641df188326215b204b798eb70c46vandwalle 4852f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalleinline void StdLibCtor3(const wchar_t* src,int32_t srcLen, stlstring s0) 4862451dbcc4f9641df188326215b204b798eb70c46vandwalle{ 4872451dbcc4f9641df188326215b204b798eb70c46vandwalle if (srcLen==-1) { 4882451dbcc4f9641df188326215b204b798eb70c46vandwalle stlstring d(src); 4892451dbcc4f9641df188326215b204b798eb70c46vandwalle }else { 4902f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalle stlstring d(src, srcLen); 4912451dbcc4f9641df188326215b204b798eb70c46vandwalle } 4922451dbcc4f9641df188326215b204b798eb70c46vandwalle} 4932451dbcc4f9641df188326215b204b798eb70c46vandwalle 49462f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalleinline stlstring stl_assign_helper(const wchar_t* src,int32_t srcLen) 495f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle{ 496931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle if (srcLen==-1) { return src;} 497931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle else { return stlstring(src, srcLen);} 498931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle} 499ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 500ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalleinline void StdLibAssign(const wchar_t* src,int32_t srcLen, stlstring s0) 501ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle{ 502ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle stlstr = stl_assign_helper(src,srcLen); 503ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle} 504ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 5050888ce6f90bdaeee799dd8361ea4781e23a33b87vandwalleinline void StdLibAssign1(const wchar_t* src,int32_t srcLen, stlstring s0) 5062451dbcc4f9641df188326215b204b798eb70c46vandwalle{ 507cf5b8eb8a08c45bd4a82f1f4bb789c8a1b08744fvandwalle if (srcLen==-1) { stlstr=src;} 5082451dbcc4f9641df188326215b204b798eb70c46vandwalle else { stlstr.assign(src, srcLen);} 5092f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalle} 5102f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalle 5112f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalleinline void StdLibAssign2(const wchar_t* src,int32_t srcLen, stlstring s0) 5122451dbcc4f9641df188326215b204b798eb70c46vandwalle{ 5132f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalle stlstr=s0; 5142f2cf21662275a0e93d7d7a6ad3d98b4c596dcf0vandwalle} 515f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle 51662f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalleinline void StdLibGetch(const wchar_t* src,int32_t srcLen, stlstring s0) 517ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle{ 518ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle s0.at(0); 51962f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle} 520ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 521931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalleinline void StdLibCatenate(const wchar_t* src,int32_t srcLen, stlstring s0) 52262f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle{ 5230888ce6f90bdaeee799dd8361ea4781e23a33b87vandwalle UTimer mystart, mystop; 5240888ce6f90bdaeee799dd8361ea4781e23a33b87vandwalle utimer_getTime(&mystart); 525931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle 526931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle *catStd += s0; 5270888ce6f90bdaeee799dd8361ea4781e23a33b87vandwalle *catStd += sCatenate_STR; 5280888ce6f90bdaeee799dd8361ea4781e23a33b87vandwalle 5290888ce6f90bdaeee799dd8361ea4781e23a33b87vandwalle utimer_getTime(&mystop); 5300888ce6f90bdaeee799dd8361ea4781e23a33b87vandwalle double mytime = utimer_getDeltaSeconds(&mystart,&mystop); 53162f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle printf("\nmytime=%f \n", mytime); 532ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 533ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle} 5342451dbcc4f9641df188326215b204b798eb70c46vandwalle 5352451dbcc4f9641df188326215b204b798eb70c46vandwalleinline void StdLibScan(const wchar_t* src,int32_t srcLen, stlstring s0) 5362451dbcc4f9641df188326215b204b798eb70c46vandwalle{ 5372451dbcc4f9641df188326215b204b798eb70c46vandwalle scan_idx = (int) sScan_STRING.find('.'); 538ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle} 539ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 54062f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalleinline void StdLibScan1(const wchar_t* src,int32_t srcLen, stlstring s0) 541f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle{ 54262f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle scan_idx = (int) sScan_STRING.find(L"123"); 54362f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle} 544ecd2b88214b5d214fd1f63a9560caff9058912ddvandwalle 54562f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalleinline void StdLibScan2(const wchar_t* src,int32_t srcLen, stlstring s0) 54662f1d0ca8ea4466628f6ff179b1f20e1279fa7e0vandwalle{ 547f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle scan_idx = (int) sScan_STRING.find_first_of(L"sm"); 548f22d23092ab37286a5ef9d257d5bb32c421d2669vandwalle} 549992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle 550931338d1533d1bd11ba0e5aebb4e4b7b2c8ab056vandwalle#endif // STRINGPERF_H 551992ae00f25a9cc22cf5db3261bd7e72927069cf7vandwalle 552005c1ef113192f898499a407dd266393a8d6b076vandwalle