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