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