From 7e6abe9e14bcdec5197a54d3ea10e00005dc636a Mon Sep 17 00:00:00 2001 From: amichelo <andrea.michelotti@lnf.infn.it> Date: Wed, 29 Nov 2017 12:46:07 +0100 Subject: [PATCH] CDataWrapper no default values but exception if data cannot be converted,removed annoying warning --- chaos/common/data/CDataWrapper.cpp | 74 +++++++++++++------ chaos/common/data/CDataWrapper.h | 22 ++---- .../external_lib/bson/bson/bson-endian.h | 2 +- chaosframework.config | 1 + chaosframework.files | 55 ++++++++++++++ chaosframework.includes | 2 + 6 files changed, 116 insertions(+), 40 deletions(-) diff --git a/chaos/common/data/CDataWrapper.cpp b/chaos/common/data/CDataWrapper.cpp index 97c1dd847..c0907cccc 100644 --- a/chaos/common/data/CDataWrapper.cpp +++ b/chaos/common/data/CDataWrapper.cpp @@ -34,6 +34,10 @@ using namespace chaos::common::data; #define ALLOCATE_BSONT(x) ChaosBsonShrdPtr(x, &bsonDeallocator) #define ACCESS_BSON(x) static_cast<bson_t*>(x.get()) +#define CW_CAST_EXCEPTION(type){\ + std::stringstream ss;\ + ss<<"cannot get or cast to '" #type "'"<<key<<"'";\ + throw CException(1, ss.str(), __PRETTY_FUNCTION__);} #define ENSURE_ARRAY(x) \ if(x.get() == NULL) {array_index = 0; x = ALLOCATE_BSONT(bson_new());} @@ -267,59 +271,81 @@ const char * CDataWrapper::getCStringValue(const std::string& key) const{ } //add a integer value -int32_t CDataWrapper::getInt32Value(const std::string& key, - int32_t default_value) const{ +int32_t CDataWrapper::getInt32Value(const std::string& key) const{ FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT32){ return bson_iter_int32(&element_found); - } else { - return default_value; + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_BOOL){ + return bson_iter_bool(&element_found); } + CW_CAST_EXCEPTION(int32); + } //add a integer value -uint32_t CDataWrapper::getUInt32Value(const std::string& key, - uint32_t default_value) const{ +uint32_t CDataWrapper::getUInt32Value(const std::string& key) const{ FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT32){ return static_cast<uint32_t>(bson_iter_int32(&element_found)); - } else { - return default_value; + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_BOOL){ + return bson_iter_bool(&element_found); + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_BOOL){ + return bson_iter_bool(&element_found); } + CW_CAST_EXCEPTION(uint32); + } //add a integer value -int64_t CDataWrapper::getInt64Value(const std::string& key, - int64_t default_value) const{ +int64_t CDataWrapper::getInt64Value(const std::string& key) const{ FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT64){ return bson_iter_int64(&element_found); - } else { - return default_value; + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT32){ + return bson_iter_int32(&element_found); + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_BOOL){ + return bson_iter_bool(&element_found); + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_DOUBLE){ + return bson_iter_double(&element_found); } + CW_CAST_EXCEPTION(int64); + } //add a integer value -uint64_t CDataWrapper::getUInt64Value(const std::string& key, - uint64_t default_value) const{ +uint64_t CDataWrapper::getUInt64Value(const std::string& key) const{ FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT64){ return static_cast<uint64_t>(bson_iter_int64(&element_found)); - } else { - return default_value; + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT32){ + return bson_iter_int32(&element_found); + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_BOOL){ + return bson_iter_bool(&element_found); + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_DOUBLE){ + return bson_iter_double(&element_found); } + CW_CAST_EXCEPTION(uint64); + } //add a integer value -double CDataWrapper::getDoubleValue(const std::string& key, - double default_value) const{ +double CDataWrapper::getDoubleValue(const std::string& key) const{ + // convert all types that fits into a double FIND_AND_CHECK(key, BSON_ITER_HOLDS_DOUBLE){ return bson_iter_double(&element_found); - } else { - return default_value; + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT64){ + return bson_iter_int64(&element_found); + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT32){ + return bson_iter_int32(&element_found); + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_BOOL){ + return bson_iter_bool(&element_found); } + + CW_CAST_EXCEPTION(double); + } //get a bool value -bool CDataWrapper::getBoolValue(const std::string& key, - bool default_value) const{ +bool CDataWrapper::getBoolValue(const std::string& key) const{ FIND_AND_CHECK(key, BSON_ITER_HOLDS_BOOL){ return bson_iter_bool(&element_found); - } else { - return default_value; + } else FIND_AND_CHECK(key, BSON_ITER_HOLDS_INT32){ + return bson_iter_int32(&element_found); } + CW_CAST_EXCEPTION(bool); + } //set a binary data value diff --git a/chaos/common/data/CDataWrapper.h b/chaos/common/data/CDataWrapper.h index 5b64fb6e9..de90ce6fc 100644 --- a/chaos/common/data/CDataWrapper.h +++ b/chaos/common/data/CDataWrapper.h @@ -20,8 +20,6 @@ #ifndef CDataWrapper_H #define CDataWrapper_H -//#pragma GCC diagnostic ignored "-Wignored-attributes" - #include <chaos/common/bson/bson.h> #include <chaos/common/chaos_types.h> #include <chaos/common/chaos_constants.h> @@ -87,7 +85,7 @@ namespace chaos { }; - typedef ChaosSharedPtr<bson_t> ChaosBsonShrdPtr; + typedef ChaosSharedPtr<struct _bson_t> ChaosBsonShrdPtr; /*! Class that wrap the serializaiton system for data storage @@ -191,28 +189,22 @@ namespace chaos { const CDataVariant& variant_value); //get a integer value - int32_t getInt32Value(const std::string& key, - int32_t default_value = 0) const; + int32_t getInt32Value(const std::string& key) const; //get a integer value - int64_t getInt64Value(const std::string& key, - int64_t default_value = 0) const; + int64_t getInt64Value(const std::string& key) const; //get a integer value - uint32_t getUInt32Value(const std::string& key, - uint32_t default_value = 0) const; + uint32_t getUInt32Value(const std::string& key) const; //get a integer value - uint64_t getUInt64Value(const std::string& key, - uint64_t default_value = 0) const; + uint64_t getUInt64Value(const std::string& key) const; //add a integer value - double getDoubleValue(const std::string& key, - double default_value = 0) const; + double getDoubleValue(const std::string& key) const; //get a bool value - bool getBoolValue(const std::string&, - bool default_value = 0) const; + bool getBoolValue(const std::string&) const; //get a json value diff --git a/chaos_micro_unit_toolkit/external_lib/bson/bson/bson-endian.h b/chaos_micro_unit_toolkit/external_lib/bson/bson/bson-endian.h index 839820ee4..8b4b187f4 100644 --- a/chaos_micro_unit_toolkit/external_lib/bson/bson/bson-endian.h +++ b/chaos_micro_unit_toolkit/external_lib/bson/bson/bson-endian.h @@ -1,4 +1,4 @@ -/* + /* * Copyright 2013 MongoDB, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/chaosframework.config b/chaosframework.config index e0284f425..14271cd17 100644 --- a/chaosframework.config +++ b/chaosframework.config @@ -1,2 +1,3 @@ // Add predefined macros for your project here. For example: // #define THE_ANSWER 42 +#define DISABLE_COMPARE_AND_SWAP diff --git a/chaosframework.files b/chaosframework.files index fc31830eb..9bd65e29b 100644 --- a/chaosframework.files +++ b/chaosframework.files @@ -852,6 +852,59 @@ chaos/common/bson/base/stringutils.cpp chaos/common/bson/base/stringutils.h chaos/common/bson/bson-inl.h chaos/common/bson/bson.h +chaos/common/bson/bson.h +chaos/common/bson/bson/b64_ntop.h +chaos/common/bson/bson/b64_ntop.h +chaos/common/bson/bson/b64_pton.h +chaos/common/bson/bson/bcon.c +chaos/common/bson/bson/bcon.h +chaos/common/bson/bson/bson-atomic.c +chaos/common/bson/bson/bson-atomic.h +chaos/common/bson/bson/bson-clock.c +chaos/common/bson/bson/bson-clock.h +chaos/common/bson/bson/bson-compat.h +chaos/common/bson/bson/bson-config.h +chaos/common/bson/bson/bson-context-private.h +chaos/common/bson/bson/bson-context.c +chaos/common/bson/bson/bson-context.h +chaos/common/bson/bson/bson-decimal128.c +chaos/common/bson/bson/bson-decimal128.h +chaos/common/bson/bson/bson-endian.h +chaos/common/bson/bson/bson-error.c +chaos/common/bson/bson/bson-error.h +chaos/common/bson/bson/bson-iso8601-private.h +chaos/common/bson/bson/bson-iso8601.c +chaos/common/bson/bson/bson-iter.c +chaos/common/bson/bson/bson-iter.h +chaos/common/bson/bson/bson-json.c +chaos/common/bson/bson/bson-json.h +chaos/common/bson/bson/bson-keys.c +chaos/common/bson/bson/bson-keys.h +chaos/common/bson/bson/bson-macros.h +chaos/common/bson/bson/bson-md5.c +chaos/common/bson/bson/bson-md5.h +chaos/common/bson/bson/bson-memory.c +chaos/common/bson/bson/bson-memory.h +chaos/common/bson/bson/bson-oid.c +chaos/common/bson/bson/bson-oid.h +chaos/common/bson/bson/bson-private.h +chaos/common/bson/bson/bson-reader.c +chaos/common/bson/bson/bson-reader.h +chaos/common/bson/bson/bson-stdint-win32.h +chaos/common/bson/bson/bson-string.c +chaos/common/bson/bson/bson-string.h +chaos/common/bson/bson/bson-thread-private.h +chaos/common/bson/bson/bson-timegm-private.h +chaos/common/bson/bson/bson-timegm.c +chaos/common/bson/bson/bson-types.h +chaos/common/bson/bson/bson-utf8.c +chaos/common/bson/bson/bson-utf8.h +chaos/common/bson/bson/bson-value.c +chaos/common/bson/bson/bson-value.h +chaos/common/bson/bson/bson-writer.c +chaos/common/bson/bson/bson-writer.h +chaos/common/bson/bson/bson.c +chaos/common/bson/bson/bson.h chaos/common/bson/bson_builder_base.h chaos/common/bson/bson_db.h chaos/common/bson/bson_field.h @@ -865,6 +918,8 @@ chaos/common/bson/bsonobjbuilder_test.cpp chaos/common/bson/bsonobjiterator.h chaos/common/bson/bsontypes.h chaos/common/bson/inline_decls.h +chaos/common/bson/jsonsl/jsonsl.c +chaos/common/bson/jsonsl/jsonsl.h chaos/common/bson/murmurhash3/MurmurHash3.cpp chaos/common/bson/murmurhash3/MurmurHash3.h chaos/common/bson/mutable/algorithm.h diff --git a/chaosframework.includes b/chaosframework.includes index e35ea0bd8..6ad26658f 100644 --- a/chaosframework.includes +++ b/chaosframework.includes @@ -588,3 +588,5 @@ usr/local/tutorials/tree chaos_micro_unit_toolkit/external_lib/bson/bson chaos/common/test usr/local/include +chaos/common/bson/bson +chaos/common/bson/jsonsl -- GitLab