/*************************************************************************** * * Copyright (c) 2008 Baidu.com, Inc. All Rights Reserved * $Id: Int32.h,v 1.4 2010/04/28 12:45:33 scmpf Exp $ * **************************************************************************/ /** * @file Int32.h * @author chenxm(chenxiaoming@baidu.com) * @date 2008/09/24 01:32:42 * @version $Revision: 1.4 $ * @brief * **/ #ifndef __BSL_VAR_INT32_H__ #define __BSL_VAR_INT32_H__ #include #include #include "bsl/var/IVar.h" #include "bsl/var/Ref.h" #include "bsl/check_cast.h" #include "BigInt.h" namespace bsl{ namespace var{ class Int32: public IVar{ public: typedef IVar::string_type string_type; typedef IVar::field_type field_type; public: //special methods Int32( int __value = 0 ) :_value(__value){} Int32( const Int32& other ) :IVar(other), _value( other._value ) {} Int32& operator = ( const Int32& other ){ _value = other._value; return *this; } //methods for all virtual Int32& operator = ( IVar& var ) { try{ _value = var.to_int32(); //throw }catch(bsl::Exception& e){ e<<"{bsl::var::Int32::operator =("<(_value); } /** * @brief 转化为8位无符号整数类型(所有is_number()返回真的类型都支持) * * @return unsigned char * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual unsigned char to_uint8() const { return check_cast(_value); } /** * @brief 转化为16位有符号整数类型(所有is_number()返回真的类型都支持) * * @return signed short * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual signed short to_int16() const { return check_cast(_value); } /** * @brief 转化为16位无符号整数类型(所有is_number()返回真的类型都支持) * * @return unsigned short * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual unsigned short to_uint16() const { return check_cast(_value); } /** * @brief 转化为32位有符号整数类型(所有is_number()返回真的类型都支持) * * @return signed int * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual signed int to_int32() const { return _value; } /** * @brief 转化为32位无符号整数类型(所有is_number()返回真的类型都支持) * * @return unsigned int * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual unsigned int to_uint32() const { return check_cast(_value); } /** * @brief * * @return long long * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual long long to_int64() const { return _value; } /** * @brief 转化为64位无符号整数类型(所有is_number()返回真的类型都支持) * * @return unsigned long long * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual unsigned long long to_uint64() const { return check_cast(_value); } /** * @brief conversion to bigint, not a virtual function derived * * @tparam bits * * @return * * @version 1.1.24 * @author linjieqiong * @date 2013/07/25 15:51:13 */ template BigInt to_bigint() { BigInt tmp = _value; return tmp; } /** * @brief 转化为单精度浮点数类型(所有is_number()返回真的类型都支持) * * @return float * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual float to_float() const { return static_cast(_value); } /** * @brief 转化为双精度浮点数类型(所有is_number()返回真的类型都支持) * * @return double * @retval * @see * @author chenxm * @date 2010/03/17 18:09:14 **/ virtual double to_double() const { return static_cast(_value); } virtual Int32& operator = ( bool b ){ _value = b; return *this; } /** * @brief 使用signed char类型赋值 * * @param [in] val : signed char * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( signed char i ){ _value = i; return *this; } /** * @brief 使用unsigned char类型赋值 * * @param [in] val : unsigned char * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( unsigned char i ){ _value = i; return *this; } /** * @brief 使用signed short类型赋值 * * @param [in] val : signed short * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( signed short i ){ _value = i; return *this; } /** * @brief 使用unsigned short类型赋值 * * @param [in] val : unsigned short * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( unsigned short i ){ _value = i; return *this; } /** * @brief 使用signed int类型赋值 * * @param [in] val : signed int * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( signed int i ){ _value = i; return *this; } /** * @brief 使用unsigned int类型赋值 * * @param [in] val : unsigned int * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( unsigned int ll ){ _value = check_cast(ll); return *this; } virtual Int32& operator = ( long long ll ){ _value = check_cast(ll); return *this; } /** * @brief 使用unsigned long long类型赋值 * * @param [in] val : unsigned long long * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( unsigned long long ll ){ _value = check_cast(ll); return *this; } /** * @brief * * @tparam bits * @param val * * @return * * @version 1.1.24 * @author linjieqiong * @date 2013/07/25 16:26:45 */ template Int32& operator = ( BigInt val){ _value = val.to_int32(); return *this; } /** * @brief 使用float类型赋值 * * @param [in] val : float * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( float f ){ _value = check_cast(f); return *this; } /** * @brief 使用double类型赋值 * * @param [in] val : double * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( double d ){ _value = check_cast(d); return *this; } /** * @brief 使用const char *类型赋值 * * @param [in] val : const char * * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( const char *cstr ){ _value = check_cast(cstr); return *this; } /** * @brief 使用字符串类型赋值 * * @param [in] val : const string_type& * @return Int32& * @retval * @see * @author chenxm * @date 2010/03/17 19:23:16 **/ virtual Int32& operator = ( const string_type& str ){ _value = check_cast(str.c_str()); return *this; } //use default version for raw using IVar::operator =; //testers virtual bool is_number() const { return true; } virtual bool is_int32() const { return true; } private: int _value; }; }} //namespace bsl::var #endif //__BSL_VAR_INT32_H__ /* vim: set ts=4 sw=4 sts=4 tw=100 */