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