Hi Jenei, On Sunday, 2011-08-21 14:59:26 +0200, Jenei Gábor wrote:
> + ::rtl::OUStringBuffer sTemp; Construct the buffer with a sufficient capacity beforehand so no memory allocation needs to be done in between: ::rtl::OUStringBuffer sTemp( nQueryLen); > [...] > + return (::rtl::OUString)sTemp; Make that instead return sTemp.makeStringAndClear(); With your C-style cast (please don't use those anyhow, this is C++) a temporary string instance is created and the buffer is copied, which it isn't when using makeStringAndClear(). > +std::vector< ::rtl::OUStringBuffer > getComment(const ::rtl::OUString& > sQuery){ Why return vector<OUStringBuffer> ? vector<OUString> seems to be more straight forward. > + const sal_Unicode* sCopy=sQuery.getStr(); > + int nQueryLen=sQuery.getLength(); > + bool bIsText1=false; > + bool bIsText2=false; > + bool bComment=false; > + std::vector< ::rtl::OUStringBuffer > sRet; > + ::rtl::OUStringBuffer sTemp; > + for(int i=0;i<nQueryLen;i++){ > + if(sCopy[i]=='\"' && !bIsText2 && !bComment) bIsText1=!bIsText1; > + if(sCopy[i]=='\'' && !bIsText1 && !bComment) bIsText2=!bIsText2; > + if(sCopy[i]=='\n' || i==nQueryLen-1){ > + if(bComment) bComment=false; > + sTemp.append((sal_Unicode)'\n'); > + sRet.push_back(sTemp); > + sTemp=::rtl::OUString(); Provided that vector<OUString> is returned, change that to sRet.push_back( sTemp.makeStringAndClear()); then there's also no need to assign sTemp an empty OUString anymore. > + } > + if(!bIsText1 && !bIsText2 && (i+1)<nQueryLen && sCopy[i]=='-' && > sCopy[i+1]=='-') bComment=true; > + if(!bIsText1 && !bIsText2 && (i+1)<nQueryLen && sCopy[i]=='/' && > sCopy[i+1]=='/') bComment=true; > + if(bComment) sTemp.append(&sCopy[i],1); > + } > + sTemp=::rtl::OUString(); That one is superfluous, sTemp as a stack local variable will be destructed upon return anyway. > + return sRet; > +} > +//------------------------------------------------------------------------------ > +::rtl::OUString ConcatComment(const ::rtl::OUString& sQuery,std::vector< > ::rtl::OUStringBuffer > sComments){ Pass sComments as const reference so it doesn't need to be copied when ConcatComment() is called. And use vector<OUString> instead, as above. > + ::rtl::OUStringBuffer sRet; > + int nIndLF=0; > + int nIndBeg=0; > + for(unsigned int i=0;i<sComments.size();i++){ > + nIndBeg=nIndLF; > + if(sQuery.indexOf('\n')==-1){ > + nIndLF=sQuery.getLength(); This conditional gets executed for each element of sComments, but clearly sQuery can't change in between, so doing this over and over again is unnecessary. > + } > + else{ > + nIndLF=sQuery.indexOf('\n',nIndLF); > + } > + sRet.append(sQuery.copy(nIndBeg,nIndLF-nIndBeg)); What if sQuery doesn't contain as many LFs as there are elements in sComments? nIndLF will be -1 and in the next loop run nIndBeg will also be -1. The append(copy()) construct could be optimized as the copy creates a temporary OUString instance that then is appended to sRet. More effective would be something like sRet.append( sQuery.getStr() + nIndBeg, nIndLF - nIndBeg)); > + sRet.append(sComments[i]); > + } > + return (::rtl::OUString)sRet; Same here, use return sRet.makeStringAndClear(); Btw, > + sTranslatedStmt=ConcatComment(sTranslatedStmt,sComments); blanks increase legibility, maybe it's just me but I'd much prefer a sTranslatedStmt = ConcatComment( sTranslatedStmt, sComments); style instead. Thanks Eike -- PGP/OpenPGP/GnuPG encrypted mail preferred in all private communication. Key ID: 0x293C05FD - 997A 4C60 CE41 0149 0DB3 9E96 2F1A D073 293C 05FD
signature.asc
Description: Digital signature
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice