json-cpp添加long类型

1.value.h中的enum ValueType添加longValue,如:

enum ValueType

{

nullValue = 0, ///< 'null' value

intValue, ///< signed integer value

uintValue, ///< unsigned integer value

longValue,

realValue, ///< double value

stringValue, ///< UTF-8 string value

booleanValue, ///< bool value

arrayValue, ///< array value (ordered list)

objectValue ///< object value (collection of name/value pairs).

};

 

2.json_value.cpp中Value::Value( ValueType type )添加case longValue:,如:

Value::Value( ValueType type )

: type_( type )

, allocated_( 0 )

, comments_( 0 )

# ifdef JSON_VALUE_USE_INTERNAL_MAP

, itemIsUsed_( 0 )

#endif

{

switch ( type )

{

case nullValue:

break;

case intValue:

case uintValue:

value_.int_ = 0;

break;

case longValue:

value_.long_ = 0;

break;

case realValue:

value_.real_ = 0.0;

break;

 

3.json_value.cpp添加 Value::Value( long value )如:

Value::Value( long value )

: type_( longValue )

, comments_( 0 )

# ifdef JSON_VALUE_USE_INTERNAL_MAP

, itemIsUsed_( 0 )

#endif

{

value_.long_ = value;

}

 

4.json_value.cpp中Value::Value( const Value &other )添加 case longValue:,如:

Value::Value( const Value &other )

: type_( other.type_ )

, comments_( 0 )

# ifdef JSON_VALUE_USE_INTERNAL_MAP

, itemIsUsed_( 0 )

#endif

{

switch ( type_ )

{

case nullValue:

case intValue:

case uintValue:

case longValue:

case realValue:

case booleanValue:

 

5.json_value.cpp中Value::~Value()添加case longValue:如:

Value::~Value()

{

switch ( type_ )

{

case nullValue:

case intValue:

case uintValue:

case longValue:

case realValue:

 

6.json_value.cpp中Value::operator <( const Value &other ) const添加case longValue:,如

bool

Value::operator <( const Value &other ) const

{

int typeDelta = type_ - other.type_;

if ( typeDelta )

return typeDelta < 0 ? true : false;

switch ( type_ )

{

case nullValue:

return false;

case intValue:

return value_.int_ < other.value_.int_;

case uintValue:

return value_.uint_ < other.value_.uint_;

case longValue:

return value_.long_ < other.value_.long_;

case realValue:

json_value.cpp中Value::operator ==( const Value &other ) const添加case longValue:,如

bool

Value::operator ==( const Value &other ) const

{

//if ( type_ != other.type_ )

// GCC 2.95.3 says:

// attempt to take address of bit-field structure member `Json::Value::type_'

// Beats me, but a temp solves the problem.

int temp = other.type_;

if ( type_ != temp )

return false;

switch ( type_ )

{

case nullValue:

return true;

case intValue:

return value_.int_ == other.value_.int_;

case uintValue:

return value_.uint_ == other.value_.uint_;

case longValue:

return value_.long_ == other.value_.long_;

case realValue:

 

7.json_value.cpp中Value::asString() const添加case longValue:,如

std::string

Value::asString() const

{

switch ( type_ )

{

case nullValue:

return "";

case stringValue:

return value_.string_ ? value_.string_ : "";

case booleanValue:

return value_.bool_ ? "true" : "false";

case intValue:

case uintValue:

case longValue:

case realValue:

 

8.json_value.cpp中Value::asInt() const添加case longValue:如

Value::Int

Value::asInt() const

{

switch ( type_ )

{

case nullValue:

return 0;

case intValue:

return value_.int_;

case uintValue:

JSON_ASSERT_MESSAGE( value_.uint_ < (unsigned)maxInt, "integer out of signed integer range" );

return value_.uint_;

case longValue:

JSON_ASSERT_MESSAGE( value_.long_ < (unsigned)maxInt, "long out of signed integer range" );

return value_.long_;

case realValue:

 

9.json_value.cpp中Value::asUInt() 添加case longValue:如

Value::asUInt() const

{

switch ( type_ )

{

case nullValue:

return 0;

case intValue:

JSON_ASSERT_MESSAGE( value_.int_ >= 0, "Negative integer can not be converted to unsigned integer" );

return value_.int_;

case uintValue:

return value_.uint_;

case longValue:

JSON_ASSERT_MESSAGE( value_.long_ >= 0 && value_.long_ <= maxUInt, "long can not be converted to unsigned integer" );

return value_.long_;

case realValue:

JSON_ASSERT_MESSAGE( value_.real_ >= 0 && value_.real_ <= maxUInt, "Real out of unsigned integer range" );

return UInt( value_.real_ );

 

10.json_value.cpp添加接口long

Value::asLong() const,如

long

Value::asLong() const

{

switch ( type_ )

{

case nullValue:

return 0.0;

case intValue:

return value_.int_;

case uintValue:

return value_.uint_;

case longValue:

return value_.long_;

case realValue:

return UInt( value_.real_ );

case booleanValue:

return value_.bool_ ? 1.0 : 0.0;

case stringValue:

case arrayValue:

case objectValue:

JSON_ASSERT_MESSAGE( false, "Type is not convertible to double" );

default:

JSON_ASSERT_UNREACHABLE;

}

return 0; // unreachable;

}

 

11.json_value.cpp接口Value::asBool()添加case longValue:,如:

bool

Value::asBool() const

{

switch ( type_ )

{

case nullValue:

return false;

case intValue:

case uintValue:

return value_.int_ != 0;

case longValue:

return value_.long_ != 0;

case realValue:

return value_.real_ != 0.0;

 

12.json_value.cpp接口Value::size()添加case longValue:,如

Value::size() const

{

switch ( type_ )

{

case nullValue:

case intValue:

case uintValue:

case realValue:

case longValue:

case booleanValue:

 

13.json_value.cpp添加Value::isLong()接口,如:

bool

Value::isLong() const

{

return type_ == longValue;

}

 

14.json_write.cpp接口FastWriter::writeValue,StyledWriter::writeValue( const Value &value ),StyledStreamWriter::writeValue添加case longValue:,如:

FastWriter::writeValue( const Value &value )

{

switch ( value.type() )

{

case nullValue:

document_ += "null";

break;

case intValue:

document_ += valueToString( value.asInt() );

break;

case uintValue:

document_ += valueToString( value.asUInt() );

break;

case longValue:

document_ += valueToString( value.asLong() );

break;

case realValue:

StyledWriter::writeValue( const Value &value )

{

switch ( value.type() )

{

case nullValue:

pushValue( "null" );

break;

case intValue:

pushValue( valueToString( value.asInt() ) );

break;

case uintValue:

pushValue( valueToString( value.asUInt() ) );

break;

case longValue:

pushValue( valueToString( value.asLong() ) );

break;

case realValue:

StyledStreamWriter::writeValue( const Value &value )

{

switch ( value.type() )

{

case nullValue:

pushValue( "null" );

break;

case intValue:

pushValue( valueToString( value.asInt() ) );

break;

case uintValue:

pushValue( valueToString( value.asUInt() ) );

break;

case longValue:

pushValue( valueToString( value.asLong() ) );

break;

 

15.json_write.cpp添加接口std::string valueToString( long value ),如

std::string valueToString( long value )

{

std::stringstream ss;

ss << value;

return ss.str();

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值