This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Lexical conversion.


> > #include <sstream>
> > 
> > string convert (const int number) {
> >      ostringstream ostr;
> >      ostr << number;
> >      return ostr.str ();
> > }
> 
> Sigh! I decided (especially as most the cases I worry about 
> are in 0-9) to 
> implement it like so.. (I unit tested it so I'm reasonable 
> confident it 
> works and its about 3 times faster in the general case than 
> using printf)


Why do you suppose there is such a great speed improvement with the code
below?  It seems to me that snprintf() should be able to optimize this task
quite effectively.  The only overhead should be the parsing of the format
string, which in this case would be very simple.

--Matt


> 
> string convert(const int value) {
>   int abs_value;
> 
>   if (value >= 0) {
>     // Optimise for single digit case...
>     if (value <= 9) {
>       return string( 1, '0'+value);
>     }
> 
>     abs_value = value;
>   } else {
>     abs_value = -value;
>   }
> 
>   char buf[100];
>   char * start = buf+100;
>   char * end = start;
> 
>   do {
>     *(--start) = '0' + abs_value % 10;
>     abs_value /= 10;
>   } while (abs_value);
>   
>   if( value < 0) {
>     *(--start) = '-';
>   }
> 
>   return string(start, end-start);
> }
> 
> 
> -- 
> 
> 
> John Carter                             Phone : (64)(3) 358 6639
> Tait Electronics                        Fax   : (64)(3) 359 4632
> PO Box 1645 Christchurch                Email : john.carter@tait.co.nz
> New Zealand
> 
> Good Ideas:
> Ruby                 - http://www.ruby-lang-org - The best of 
> perl,python,scheme without the pain.
> Valgrind             - http://developer.kde.org/~sewardj/ - 
> memory debugger for x86-GNU/Linux
> Free your books      - http://www.bookcrossing.com
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]