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();
}