@@ -109,7 +109,7 @@ static inline char* duplicateAndPrefixStringValue(
109109 JSON_ASSERT_MESSAGE (length <= (unsigned )Value::maxInt - sizeof (unsigned ) - 1U ,
110110 " in Json::Value::duplicateAndPrefixStringValue(): "
111111 " length too big for prefixing" );
112- unsigned actualLength = length + sizeof (unsigned ) + 1U ;
112+ unsigned actualLength = length + static_cast < unsigned >( sizeof (unsigned ) ) + 1U ;
113113 char * newString = static_cast <char *>(malloc (actualLength));
114114 if (newString == 0 ) {
115115 throwRuntimeError (
@@ -233,14 +233,14 @@ void Value::CommentInfo::setComment(const char* text, size_t len) {
233233// Notes: policy_ indicates if the string was allocated when
234234// a string is stored.
235235
236- Value::CZString::CZString (ArrayIndex index ) : cstr_(0 ), index_(index ) {}
236+ Value::CZString::CZString (ArrayIndex aindex ) : cstr_(0 ), index_(aindex ) {}
237237
238- Value::CZString::CZString (char const * str, unsigned length , DuplicationPolicy allocate)
238+ Value::CZString::CZString (char const * str, unsigned ulength , DuplicationPolicy allocate)
239239 : cstr_(str)
240240{
241241 // allocate != duplicate
242- storage_.policy_ = allocate;
243- storage_.length_ = length ;
242+ storage_.policy_ = allocate & 0x3 ;
243+ storage_.length_ = ulength & 0x3FFFFFFF ;
244244}
245245
246246Value::CZString::CZString (const CZString& other)
@@ -249,9 +249,9 @@ Value::CZString::CZString(const CZString& other)
249249 : other.cstr_)
250250{
251251 storage_.policy_ = (other.cstr_
252- ? (other.storage_ .policy_ == noDuplication
252+ ? (static_cast <DuplicationPolicy>( other.storage_ .policy_ ) == noDuplication
253253 ? noDuplication : duplicate)
254- : other.storage_ .policy_ );
254+ : static_cast <DuplicationPolicy>( other.storage_ .policy_ ) );
255255 storage_.length_ = other.storage_ .length_ ;
256256}
257257
@@ -313,9 +313,9 @@ bool Value::CZString::isStaticString() const { return storage_.policy_ == noDupl
313313 * memset( this, 0, sizeof(Value) )
314314 * This optimization is used in ValueInternalMap fast allocator.
315315 */
316- Value::Value (ValueType type ) {
317- initBasic (type );
318- switch (type ) {
316+ Value::Value (ValueType vtype ) {
317+ initBasic (vtype );
318+ switch (vtype ) {
319319 case nullValue:
320320 break ;
321321 case intValue:
@@ -480,7 +480,7 @@ void Value::swapPayload(Value& other) {
480480 std::swap (value_, other.value_ );
481481 int temp2 = allocated_;
482482 allocated_ = other.allocated_ ;
483- other.allocated_ = temp2;
483+ other.allocated_ = temp2 & 0x1 ;
484484}
485485
486486void 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 }
@@ -958,8 +959,8 @@ const Value& Value::operator[](int index) const {
958959 return (*this )[ArrayIndex (index)];
959960}
960961
961- void Value::initBasic (ValueType type , bool allocated) {
962- type_ = type ;
962+ void Value::initBasic (ValueType vtype , bool allocated) {
963+ type_ = vtype ;
963964 allocated_ = allocated;
964965 comments_ = 0 ;
965966}
@@ -986,15 +987,15 @@ Value& Value::resolveReference(const char* key) {
986987}
987988
988989// @param key is not null-terminated.
989- Value& Value::resolveReference (char const * key, char const * end )
990+ Value& Value::resolveReference (char const * key, char const * cend )
990991{
991992 JSON_ASSERT_MESSAGE (
992993 type_ == nullValue || type_ == objectValue,
993994 " in Json::Value::resolveReference(key, end): requires objectValue" );
994995 if (type_ == nullValue)
995996 *this = Value (objectValue);
996997 CZString actualKey (
997- key, static_cast <unsigned >(end -key), CZString::duplicateOnCopy);
998+ key, static_cast <unsigned >(cend -key), CZString::duplicateOnCopy);
998999 ObjectValues::iterator it = value_.map_ ->lower_bound (actualKey);
9991000 if (it != value_.map_ ->end () && (*it).first == actualKey)
10001001 return (*it).second ;
@@ -1012,13 +1013,13 @@ Value Value::get(ArrayIndex index, const Value& defaultValue) const {
10121013
10131014bool Value::isValidIndex (ArrayIndex index) const { return index < size (); }
10141015
1015- Value const * Value::find (char const * key, char const * end ) const
1016+ Value const * Value::find (char const * key, char const * cend ) const
10161017{
10171018 JSON_ASSERT_MESSAGE (
10181019 type_ == nullValue || type_ == objectValue,
10191020 " in Json::Value::find(key, end, found): requires objectValue or nullValue" );
10201021 if (type_ == nullValue) return NULL ;
1021- CZString actualKey (key, static_cast <unsigned >(end -key), CZString::noDuplication);
1022+ CZString actualKey (key, static_cast <unsigned >(cend -key), CZString::noDuplication);
10221023 ObjectValues::const_iterator it = value_.map_ ->find (actualKey);
10231024 if (it == value_.map_ ->end ()) return NULL ;
10241025 return &(*it).second ;
@@ -1062,9 +1063,9 @@ Value const& Value::operator[](CppTL::ConstString const& key) const
10621063
10631064Value& Value::append (const Value& value) { return (*this )[size ()] = value; }
10641065
1065- Value Value::get (char const * key, char const * end , Value const & defaultValue) const
1066+ Value Value::get (char const * key, char const * cend , Value const & defaultValue) const
10661067{
1067- Value const * found = find (key, end );
1068+ Value const * found = find (key, cend );
10681069 return !found ? defaultValue : *found;
10691070}
10701071Value Value::get (char const * key, Value const & defaultValue) const
@@ -1077,12 +1078,12 @@ Value Value::get(std::string const& key, Value const& defaultValue) const
10771078}
10781079
10791080
1080- bool Value::removeMember (const char * key, const char * end , Value* removed)
1081+ bool Value::removeMember (const char * key, const char * cend , Value* removed)
10811082{
10821083 if (type_ != objectValue) {
10831084 return false ;
10841085 }
1085- CZString actualKey (key, static_cast <unsigned >(end -key), CZString::noDuplication);
1086+ CZString actualKey (key, static_cast <unsigned >(cend -key), CZString::noDuplication);
10861087 ObjectValues::iterator it = value_.map_ ->find (actualKey);
10871088 if (it == value_.map_ ->end ())
10881089 return false ;
@@ -1127,8 +1128,8 @@ bool Value::removeIndex(ArrayIndex index, Value* removed) {
11271128 ArrayIndex oldSize = size ();
11281129 // shift left all items left, into the place of the "removed"
11291130 for (ArrayIndex i = index; i < (oldSize - 1 ); ++i){
1130- CZString key (i);
1131- (*value_.map_ )[key ] = (*this )[i + 1 ];
1131+ CZString keey (i);
1132+ (*value_.map_ )[keey ] = (*this )[i + 1 ];
11321133 }
11331134 // erase the last one ("leftover")
11341135 CZString keyLast (oldSize - 1 );
@@ -1144,9 +1145,9 @@ Value Value::get(const CppTL::ConstString& key,
11441145}
11451146#endif
11461147
1147- bool Value::isMember (char const * key, char const * end ) const
1148+ bool Value::isMember (char const * key, char const * cend ) const
11481149{
1149- Value const * value = find (key, end );
1150+ Value const * value = find (key, cend );
11501151 return NULL != value;
11511152}
11521153bool Value::isMember (char const * key) const
0 commit comments