From 69071deef21d34bf92bcfd6c54a3535d6de379b7 Mon Sep 17 00:00:00 2001
From: Ramin Yaghoubzadeh <ryaghoubzadeh@uni-bielefeld.de>
Date: Sat, 21 Feb 2015 22:43:28 +0100
Subject: [PATCH] C++: Improved typecasting stuff

---
 ipaacalib/cpp/CMakeLists.txt                  | 16 ++++++-------
 ipaacalib/cpp/include/ipaaca/ipaaca-payload.h | 12 +++++++---
 ipaacalib/cpp/src/ipaaca-buffers.cc           |  4 ++--
 ipaacalib/cpp/src/ipaaca-payload.cc           | 24 ++++++++++++-------
 4 files changed, 35 insertions(+), 21 deletions(-)

diff --git a/ipaacalib/cpp/CMakeLists.txt b/ipaacalib/cpp/CMakeLists.txt
index 57551bd..63b940c 100644
--- a/ipaacalib/cpp/CMakeLists.txt
+++ b/ipaacalib/cpp/CMakeLists.txt
@@ -190,8 +190,8 @@ add_library(ipaaca SHARED ${SOURCE})
 # and link all the required external libs (found above using find_package etc.)
 target_link_libraries(ipaaca ${LIBS})
 
-#add_executable (ipaaca-test-json ${JSON_TEST_SOURCE})
-#target_link_libraries (ipaaca-test-json ${LIBS})
+add_executable (ipaaca-test-json ${JSON_TEST_SOURCE})
+target_link_libraries (ipaaca-test-json ${LIBS})
 
 set(DEFAULT_BIN_SUBDIR bin)
 set(DEFAULT_LIB_SUBDIR lib)
@@ -214,11 +214,11 @@ install(
 	DESTINATION include/ipaaca/
 	)
 
-#install (
-#	TARGETS ipaaca-test-json
-#	RUNTIME DESTINATION bin
-#	LIBRARY DESTINATION lib
-#	ARCHIVE DESTINATION lib
-#	)
+install (
+	TARGETS ipaaca-test-json
+	RUNTIME DESTINATION bin
+	LIBRARY DESTINATION lib
+	ARCHIVE DESTINATION lib
+	)
 
 
diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h b/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h
index d32c4f2..415cc78 100644
--- a/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h
+++ b/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h
@@ -34,6 +34,8 @@
 #ifndef __ipaaca_payload_h_INCLUDED__
 #define __ipaaca_payload_h_INCLUDED__
 
+#include <typeinfo>
+
 #ifndef __ipaaca_h_INCLUDED__
 #error "Please do not include this file directly, use ipaaca.h instead"
 #endif
@@ -298,15 +300,19 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
 			return result;
 		}
 		// FIXME why are these needed again?
+		[[deprecated("Use operator std::string() instead (i.e. explicit or implicit cast)")]]
 		IPAACA_HEADER_EXPORT std::string to_str();
 		//long to_int() { return operator long(); ;
+		[[deprecated("Use operator long() instead (i.e. explicit or implicit cast)")]]
 		IPAACA_HEADER_EXPORT long to_long();
+		[[deprecated("Use operator double() instead (i.e. explicit or implicit cast)")]]
 		IPAACA_HEADER_EXPORT double to_float();
+		[[deprecated("Use operator bool() instead (i.e. explicit or implicit cast)")]]
 		IPAACA_HEADER_EXPORT bool to_bool();
-		// getters
-		IPAACA_HEADER_EXPORT template<typename T> T get() { return json_value_cast<T>(json_value); } // specializations below
+		// getters  (not needed since conversions are enough?)
+		//IPAACA_HEADER_EXPORT template<typename T> T get() { return json_value_cast<T>(json_value); }
 		// setters
-		IPAACA_HEADER_EXPORT template<typename T> PayloadEntryProxy& set(T t);
+		//IPAACA_HEADER_EXPORT template<typename T> PayloadEntryProxy& set(T t);
 		/*{
 			pack_into_json_value<T>(t);
 			connect_to_existing_parents();
diff --git a/ipaacalib/cpp/src/ipaaca-buffers.cc b/ipaacalib/cpp/src/ipaaca-buffers.cc
index a485d04..38ac203 100644
--- a/ipaacalib/cpp/src/ipaaca-buffers.cc
+++ b/ipaacalib/cpp/src/ipaaca-buffers.cc
@@ -289,8 +289,8 @@ IPAACA_EXPORT OutputBuffer::OutputBuffer(const std::string& basename, const std:
 IPAACA_EXPORT void OutputBuffer::_initialize_server()
 {
 	//IPAACA_INFO("Entering ...")
-	//_server = getFactory().createLocalServer( Scope( _unique_name ) );
-	_server = getFactory().createServer( Scope( _unique_name ) );
+	_server = getFactory().createLocalServer( Scope( _unique_name ) );
+	//_server = getFactory().createServer( Scope( _unique_name ) );
 	//IPAACA_INFO("Registering methods")
 	_server->registerMethod("updatePayload", Server::CallbackPtr(new CallbackIUPayloadUpdate(this)));
 	_server->registerMethod("updateLinks", Server::CallbackPtr(new CallbackIULinkUpdate(this)));
diff --git a/ipaacalib/cpp/src/ipaaca-payload.cc b/ipaacalib/cpp/src/ipaaca-payload.cc
index bea8bfd..3f3a190 100644
--- a/ipaacalib/cpp/src/ipaaca-payload.cc
+++ b/ipaacalib/cpp/src/ipaaca-payload.cc
@@ -501,35 +501,43 @@ IPAACA_EXPORT PayloadEntryProxy& PayloadEntryProxy::operator=(bool value)
 
 IPAACA_EXPORT PayloadEntryProxy::operator std::string()
 {
-	return PayloadEntryProxy::get<std::string>();
+	return json_value_cast<std::string>(json_value);
+	//PayloadEntryProxy::get<std::string>();
 }
 IPAACA_EXPORT PayloadEntryProxy::operator long()
 {
-	return PayloadEntryProxy::get<long>();
+	return json_value_cast<long>(json_value);
+	//return PayloadEntryProxy::get<long>();
 }
 IPAACA_EXPORT PayloadEntryProxy::operator double()
 {
-	return PayloadEntryProxy::get<double>();
+	return json_value_cast<double>(json_value);
+	//return PayloadEntryProxy::get<double>();
 }
 IPAACA_EXPORT PayloadEntryProxy::operator bool()
 {
-	return PayloadEntryProxy::get<bool>();
+	return json_value_cast<bool>(json_value);
+	//return PayloadEntryProxy::get<bool>();
 }
 IPAACA_EXPORT std::string PayloadEntryProxy::to_str()
 {
-	return PayloadEntryProxy::get<std::string>(); 
+	return json_value_cast<std::string>(json_value);
+	//return PayloadEntryProxy::get<std::string>(); 
 }
 IPAACA_EXPORT long PayloadEntryProxy::to_long()
 {
-	return PayloadEntryProxy::get<long>();
+	return json_value_cast<long>(json_value);
+	//return PayloadEntryProxy::get<long>();
 }
 IPAACA_EXPORT double PayloadEntryProxy::to_float()
 {
-	return PayloadEntryProxy::get<double>();
+	return json_value_cast<double>(json_value);
+	//return PayloadEntryProxy::get<double>();
 }
 IPAACA_EXPORT bool PayloadEntryProxy::to_bool()
 {
-	return PayloadEntryProxy::get<bool>();
+	return json_value_cast<bool>(json_value);
+	//return PayloadEntryProxy::get<bool>();
 }
 
 
-- 
GitLab