@@ -108,7 +108,7 @@ static inline char* duplicateAndPrefixStringValue(
108108 JSON_ASSERT_MESSAGE (length <= (unsigned )Value::maxInt - sizeof (unsigned ) - 1U ,
109109 " in Json::Value::duplicateAndPrefixStringValue(): "
110110 " length too big for prefixing" );
111- unsigned actualLength = length + sizeof (unsigned ) + 1U ;
111+ unsigned actualLength = length + static_cast < unsigned >( sizeof (unsigned ) ) + 1U ;
112112 char * newString = static_cast <char *>(malloc (actualLength));
113113 if (newString == 0 ) {
114114 throwRuntimeError (
@@ -232,14 +232,14 @@ void Value::CommentInfo::setComment(const char* text, size_t len) {
232232// Notes: policy_ indicates if the string was allocated when
233233// a string is stored.
234234
235- Value::CZString::CZString (ArrayIndex index ) : cstr_(0 ), index_(index ) {}
235+ Value::CZString::CZString (ArrayIndex aindex ) : cstr_(0 ), index_(aindex ) {}
236236
237- Value::CZString::CZString (char const * str, unsigned length , DuplicationPolicy allocate)
237+ Value::CZString::CZString (char const * str, unsigned ulength , DuplicationPolicy allocate)
238238 : cstr_(str)
239239{
240240 // allocate != duplicate
241- storage_.policy_ = allocate;
242- storage_.length_ = length ;
241+ storage_.policy_ = allocate & 0x3 ;
242+ storage_.length_ = ulength & 0x3FFFFFFF ;
243243}
244244
245245Value::CZString::CZString (const CZString& other)
@@ -248,9 +248,9 @@ Value::CZString::CZString(const CZString& other)
248248 : other.cstr_)
249249{
250250 storage_.policy_ = (other.cstr_
251- ? (other.storage_ .policy_ == noDuplication
251+ ? (static_cast <DuplicationPolicy>( other.storage_ .policy_ ) == noDuplication
252252 ? noDuplication : duplicate)
253- : other.storage_ .policy_ );
253+ : static_cast <DuplicationPolicy>( other.storage_ .policy_ ) );
254254 storage_.length_ = other.storage_ .length_ ;
255255}
256256
@@ -312,9 +312,9 @@ bool Value::CZString::isStaticString() const { return storage_.policy_ == noDupl
312312 * memset( this, 0, sizeof(Value) )
313313 * This optimization is used in ValueInternalMap fast allocator.
314314 */
315- Value::Value (ValueType type ) {
316- initBasic (type );
317- switch (type ) {
315+ Value::Value (ValueType vtype ) {
316+ initBasic (vtype );
317+ switch (vtype ) {
318318 case nullValue:
319319 break ;
320320 case intValue:
@@ -478,7 +478,7 @@ void Value::swapPayload(Value& other) {
478478 std::swap (value_, other.value_ );
479479 int temp2 = allocated_;
480480 allocated_ = other.allocated_ ;
481- other.allocated_ = temp2;
481+ other.allocated_ = temp2 & 0x1 ;
482482}
483483
484484void Value::swap (Value& other) {
@@ -606,12 +606,12 @@ const char* Value::asCString() const {
606606 return this_str;
607607}
608608
609- bool Value::getString (char const ** str, char const ** end ) const {
609+ bool Value::getString (char const ** str, char const ** cend ) const {
610610 if (type_ != stringValue) return false ;
611611 if (value_.string_ == 0 ) return false ;
612612 unsigned length;
613613 decodePrefixedString (this ->allocated_ , this ->value_ .string_ , &length, str);
614- *end = *str + length;
614+ *cend = *str + length;
615615 return true ;
616616}
617617
@@ -810,7 +810,8 @@ bool Value::asBool() const {
810810 case uintValue:
811811 return value_.uint_ ? true : false ;
812812 case realValue:
813- return value_.real_ ? true : false ;
813+ // This is kind of strange. Not recommended.
814+ return (value_.real_ != 0.0 ) ? true : false ;
814815 default :
815816 break ;
816817 }
@@ -960,8 +961,8 @@ const Value& Value::operator[](int index) const {
960961 return (*this )[ArrayIndex (index)];
961962}
962963
963- void Value::initBasic (ValueType type , bool allocated) {
964- type_ = type ;
964+ void Value::initBasic (ValueType vtype , bool allocated) {
965+ type_ = vtype ;
965966 allocated_ = allocated;
966967 comments_ = 0 ;
967968 start_ = 0 ;
@@ -990,15 +991,15 @@ Value& Value::resolveReference(const char* key) {
990991}
991992
992993// @param key is not null-terminated.
993- Value& Value::resolveReference (char const * key, char const * end )
994+ Value& Value::resolveReference (char const * key, char const * cend )
994995{
995996 JSON_ASSERT_MESSAGE (
996997 type_ == nullValue || type_ == objectValue,
997998 " in Json::Value::resolveReference(key, end): requires objectValue" );
998999 if (type_ == nullValue)
9991000 *this = Value (objectValue);
10001001 CZString actualKey (
1001- key, static_cast <unsigned >(end -key), CZString::duplicateOnCopy);
1002+ key, static_cast <unsigned >(cend -key), CZString::duplicateOnCopy);
10021003 ObjectValues::iterator it = value_.map_ ->lower_bound (actualKey);
10031004 if (it != value_.map_ ->end () && (*it).first == actualKey)
10041005 return (*it).second ;
@@ -1016,13 +1017,13 @@ Value Value::get(ArrayIndex index, const Value& defaultValue) const {
10161017
10171018bool Value::isValidIndex (ArrayIndex index) const { return index < size (); }
10181019
1019- Value const * Value::find (char const * key, char const * end ) const
1020+ Value const * Value::find (char const * key, char const * cend ) const
10201021{
10211022 JSON_ASSERT_MESSAGE (
10221023 type_ == nullValue || type_ == objectValue,
10231024 " in Json::Value::find(key, end, found): requires objectValue or nullValue" );
10241025 if (type_ == nullValue) return NULL ;
1025- CZString actualKey (key, static_cast <unsigned >(end -key), CZString::noDuplication);
1026+ CZString actualKey (key, static_cast <unsigned >(cend -key), CZString::noDuplication);
10261027 ObjectValues::const_iterator it = value_.map_ ->find (actualKey);
10271028 if (it == value_.map_ ->end ()) return NULL ;
10281029 return &(*it).second ;
@@ -1066,9 +1067,9 @@ Value const& Value::operator[](CppTL::ConstString const& key) const
10661067
10671068Value& Value::append (const Value& value) { return (*this )[size ()] = value; }
10681069
1069- Value Value::get (char const * key, char const * end , Value const & defaultValue) const
1070+ Value Value::get (char const * key, char const * cend , Value const & defaultValue) const
10701071{
1071- Value const * found = find (key, end );
1072+ Value const * found = find (key, cend );
10721073 return !found ? defaultValue : *found;
10731074}
10741075Value Value::get (char const * key, Value const & defaultValue) const
@@ -1081,12 +1082,12 @@ Value Value::get(std::string const& key, Value const& defaultValue) const
10811082}
10821083
10831084
1084- bool Value::removeMember (const char * key, const char * end , Value* removed)
1085+ bool Value::removeMember (const char * key, const char * cend , Value* removed)
10851086{
10861087 if (type_ != objectValue) {
10871088 return false ;
10881089 }
1089- CZString actualKey (key, static_cast <unsigned >(end -key), CZString::noDuplication);
1090+ CZString actualKey (key, static_cast <unsigned >(cend -key), CZString::noDuplication);
10901091 ObjectValues::iterator it = value_.map_ ->find (actualKey);
10911092 if (it == value_.map_ ->end ())
10921093 return false ;
@@ -1131,8 +1132,8 @@ bool Value::removeIndex(ArrayIndex index, Value* removed) {
11311132 ArrayIndex oldSize = size ();
11321133 // shift left all items left, into the place of the "removed"
11331134 for (ArrayIndex i = index; i < (oldSize - 1 ); ++i){
1134- CZString key (i);
1135- (*value_.map_ )[key ] = (*this )[i + 1 ];
1135+ CZString keey (i);
1136+ (*value_.map_ )[keey ] = (*this )[i + 1 ];
11361137 }
11371138 // erase the last one ("leftover")
11381139 CZString keyLast (oldSize - 1 );
@@ -1148,9 +1149,9 @@ Value Value::get(const CppTL::ConstString& key,
11481149}
11491150#endif
11501151
1151- bool Value::isMember (char const * key, char const * end ) const
1152+ bool Value::isMember (char const * key, char const * cend ) const
11521153{
1153- Value const * value = find (key, end );
1154+ Value const * value = find (key, cend );
11541155 return NULL != value;
11551156}
11561157bool Value::isMember (char const * key) const
0 commit comments