Ignore:
Timestamp:
07/22/15 21:00:30 (10 years ago)
Author:
epyon
Message:
  • short_string implementation - first usages
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/stl/string.cc

    r402 r435  
    3737}
    3838
    39 nv::size_t nv::sint32_to_buffer( sint32 n, char* str )
    40 {
    41         char* s = str;
    42         uint32 abs = static_cast< uint32 >( n < 0 ? -n : n );
    43         do
    44         {
     39nv::size_t nv::sint32_to_buffer( array_ref< char > buffer, sint32 n )
     40{
     41        if ( buffer.size() < 2 ) return 0;
     42        char* last = buffer.end() - 1;
     43        char* s = buffer.begin();
     44        uint32 abs = static_cast<uint32>( n < 0 ? -n : n );
     45        do
     46        {
     47                if ( s == last ) { *buffer.begin() = '\0'; return 0;  }
    4548                *s++ = static_cast<char>( '0' + ( abs % 10 ) );
    4649                abs /= 10;
    4750        } while ( abs > 0 );
    48         if ( n < 0 ) *s++ = '-';
    49         *s = '\0';
    50         string_reverse( str, s - 1 );
    51         return static_cast<nv::size_t>( s - str );
    52 }
    53 
    54 nv::size_t nv::sint64_to_buffer( sint64 n, char* str )
    55 {
    56         char* s = str;
    57         uint64 abs = static_cast< uint64 >( n < 0 ? -n : n );
    58         do
    59         {
     51        if ( n < 0 )
     52        {
     53                if ( s == last ) { *buffer.begin() = '\0'; return 0; }
     54                *s++ = '-';
     55        }
     56        *s = '\0';
     57        string_reverse( buffer.begin(), s - 1 );
     58        return static_cast<nv::size_t>( s - buffer.begin() );
     59}
     60
     61nv::size_t nv::sint64_to_buffer( array_ref< char > buffer, sint64 n )
     62{
     63        if ( buffer.size() < 2 ) return 0;
     64        char* last = buffer.end() - 1;
     65        char* s = buffer.begin();
     66        uint64 abs = static_cast<uint64>( n < 0 ? -n : n );
     67        do
     68        {
     69                if ( s == last ) { *buffer.begin() = '\0'; return 0; }
    6070                *s++ = static_cast<char>( '0' + ( abs % 10 ) );
    6171                abs /= 10;
    6272        } while ( abs > 0 );
    63         if ( n < 0 ) *s++ = '-';
    64         *s = '\0';
    65         string_reverse( str, s - 1 );
    66         return static_cast<nv::size_t>( s - str );
    67 }
    68 
    69 nv::size_t nv::uint32_to_buffer( uint32 n, char* str )
    70 {
    71         char* s = str;
    72         do
    73         {
     73        if ( n < 0 )
     74        {
     75                if ( s == last ) { *buffer.begin() = '\0'; return 0; }
     76                *s++ = '-';
     77        }
     78        *s = '\0';
     79        string_reverse( buffer.begin(), s - 1 );
     80        return static_cast<nv::size_t>( s - buffer.begin() );
     81}
     82
     83nv::size_t nv::uint32_to_buffer( array_ref< char > buffer, uint32 n )
     84{
     85        if ( buffer.size() < 2 ) return 0;
     86        char* last = buffer.end() - 1;
     87        char* s = buffer.begin();
     88        do
     89        {
     90                if ( s == last ) { *buffer.begin() = '\0'; return 0; }
    7491                *s++ = static_cast<char>( '0' + ( n % 10 ) );
    7592                n /= 10;
    7693        } while ( n > 0 );
    7794        *s = '\0';
    78         string_reverse( str, s - 1 );
    79         return static_cast<nv::size_t>( s - str );
    80 }
    81 
    82 nv::size_t nv::uint64_to_buffer( uint64 n, char* str )
    83 {
    84         char* s = str;
    85         do
    86         {
     95        string_reverse( buffer.begin(), s - 1 );
     96        return static_cast<nv::size_t>( s - buffer.begin() );
     97}
     98
     99nv::size_t nv::uint64_to_buffer( array_ref< char > buffer, uint64 n )
     100{
     101        if ( buffer.size() < 2 ) return 0;
     102        char* last = buffer.end() - 1;
     103        char* s = buffer.begin();
     104        do
     105        {
     106                if ( s == last ) { *buffer.begin() = '\0'; return 0; }
    87107                *s++ = static_cast<char>( '0' + ( n % 10 ) );
    88108                n /= 10;
    89109        } while ( n > 0 );
    90110        *s = '\0';
    91         string_reverse( str, s - 1 );
    92         return static_cast<nv::size_t>( s - str );
    93 }
    94 
    95 nv::size_t nv::f32_to_buffer( f32 n, char* str )
     111        string_reverse( buffer.begin(), s - 1 );
     112        return static_cast<nv::size_t>( s - buffer.begin() );
     113}
     114
     115nv::size_t nv::f32_to_buffer( array_ref< char > buffer, f32 n )
    96116{
    97117#if NV_COMPILER == NV_MSVC
    98         int result = sprintf_s( str, 64, "%.*g", 6, n );
     118        int result = sprintf_s( buffer.data(), buffer.size(), "%.*g", 6, n );
    99119#else
    100         int result = snprintf( str, 64, "%.*g", 6, n );
     120        int result = snprintf( buffer.data(), buffer.size(), "%.*g", 6, n );
    101121#endif
    102122        return static_cast<nv::size_t>( result > 0 ? result : 0 );
    103123}
    104124
    105 nv::size_t nv::f64_to_buffer( f64 n, char* str )
     125nv::size_t nv::f64_to_buffer( array_ref< char > buffer, f64 n )
    106126{
    107127#if NV_COMPILER == NV_MSVC
    108         int result = sprintf_s( str, 64, "%.*g", 6, n );
     128        int result = sprintf_s( buffer.data(), buffer.size(), "%.*g", 6, n );
    109129#else
    110         int result = snprintf( str, 64, "%.*g", 6, n );
     130        int result = snprintf( buffer.data(), buffer.size(), "%.*g", 6, n );
    111131#endif
    112132        return static_cast<nv::size_t>( result > 0 ? result : 0 );
Note: See TracChangeset for help on using the changeset viewer.