home *** CD-ROM | disk | FTP | other *** search
- #include "Converter.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
-
- static char buffer[256];
-
- template<typename T>
- static const char * pri(const char * format, T val )
- {
- sprintf( buffer, format, val );
- return buffer;
- }
-
- const char * Converter::convert( bool number )
- {
- //MAX: ne uveren chto tak
- return pri( "%d", number );
- }
-
- const char * Converter::convert( int number )
- {
- return pri( "%d", number );
- }
-
- const char * Converter::convert( unsigned number )
- {
- return pri( "%d", number );
- }
-
- const char * Converter::convert( float number )
- {
- return pri( "%f", number );
- }
-
- const char * Converter::convert( double number )
- {
- return pri( "%lf", number );
- }
-
- bool Converter::convert( const char * stt, bool * number )
- {
- int n = 0;
- if( low_level_convert( stt, &n ) != stt )
- {
- *number = !!n;
- return true;
- }
- return false;
- }
-
- bool Converter::convert( const char * stt, int * number )
- {
- if( low_level_convert( stt, number ) != stt )
- return true;
- return false;
- }
-
- bool Converter::convert( const char * stt, unsigned * number )
- {
- int n = 0;
- if( low_level_convert( stt, &n ) != stt )
- {
- *number = n;
- return true;
- }
- return false;
- }
-
- bool Converter::convert( const char * stt, float * number )
- {
- if( low_level_convert( stt, number ) != stt )
- return true;
- return false;
- }
-
- bool Converter::convert( const char * stt, double * number )
- {
- if( low_level_convert( stt, number ) != stt )
- return true;
- return false;
- }
-
- const char * Converter::low_level_convert( const char * stt, int * number )
- {
- const char * ptr = stt;
- while ( isspace(*ptr) )
- ++ptr;
-
- int c = *ptr++;
- int sign = c;
- if (c == '-' || c == '+')
- c = *ptr++;
-
- int total = 0;
- bool any_digit = false;
-
- while (isdigit(c))
- {
- any_digit = true;
- total = 10 * total + (c - '0');
- c = *ptr++;
- }
-
- if (sign == '-')
- *number = -total;
- else
- *number = total;
- return any_digit ? ptr : stt;
- }
-
- template<typename T>
- const char * any_float_convert( const char * stt, T * number )
- {
- const char * ptr = stt;
- while ( isspace(*ptr) )
- ++ptr;
-
- int c = *ptr++;
- int sign = c;
- if (c == '-' || c == '+')
- c = *ptr++;
-
- T total = 0;
- bool any_digit = false;
-
- while (isdigit(c))
- {
- any_digit = true;
- total = 10 * total + (c - '0');
- c = *ptr++;
- }
- if( c == '.' )
- {
- c = *ptr++;
- T mul = T(0.1);
- while (isdigit(c))
- {
- any_digit = true;
- total += mul * (c - '0');
- mul *= T(0.1);
- c = *ptr++;
- }
- }
-
- if (sign == '-')
- *number = -total;
- else
- *number = total;
- return any_digit ? ptr : stt;
- /// *number = atof( stt );
- /// return stt + 1;
- }
-
- const char * Converter::low_level_convert( const char * stt, double * number )
- {
- return any_float_convert( stt, number );
- }
-
- const char * Converter::low_level_convert( const char * stt, float * number )
- {
- return any_float_convert( stt, number );
- }
-