Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / thirdparty / clDNN / src / include / error_handler.h
index 36f6bd7..5126d01 100644 (file)
@@ -1,5 +1,5 @@
 /*
-// Copyright (c) 2017 Intel Corporation
+// Copyright (c) 2017-2018 Intel Corporation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -34,23 +34,33 @@ namespace err_details
 template<typename N1, typename N2>
 inline void error_on_not_equal(const std::string& file, int line, const std::string& instance_id, const std::string& number_id, N1 number, const std::string& compare_to_id, N2 number_to_compare_to, const std::string& additional_message = "")
 {
-    std::stringstream error_msg;
+    if (number != static_cast<decltype(number)>(number_to_compare_to))
     {
-        if (number != static_cast<decltype(number)>(number_to_compare_to))
-        {
-            error_msg << number_id << "(=" << number << ") is not equal to: " << compare_to_id << "(=" << number_to_compare_to << ")" << std::endl;
-            err_details::cldnn_print_error_message(file, line, instance_id, error_msg, additional_message);
-        }
+        std::stringstream error_msg;
+        error_msg << number_id << "(=" << number << ") is not equal to: " << compare_to_id << "(=" << number_to_compare_to << ")" << std::endl;
+        err_details::cldnn_print_error_message(file, line, instance_id, error_msg, additional_message);
     }
 }
 #define CLDNN_ERROR_NOT_EQUAL(instance_id, number_id, number, compare_to_id, number_to_compare_to, add_msg) error_on_not_equal(__FILE__, __LINE__, instance_id, number_id, number, compare_to_id, number_to_compare_to, add_msg)
 
 template<typename N1, typename N2>
+inline void error_on_equal(const std::string& file, int line, const std::string& instance_id, const std::string& number_id, N1 number, const std::string& compare_to_id, N2 number_to_compare_to, const std::string& additional_message = "")
+{
+    if (number == static_cast<decltype(number)>(number_to_compare_to))
+    {
+        std::stringstream error_msg;
+        error_msg << number_id << "(=" << number << ") is equal to: " << compare_to_id << "(=" << number_to_compare_to << ")" << std::endl;
+        err_details::cldnn_print_error_message(file, line, instance_id, error_msg, additional_message);
+    }
+}
+#define CLDNN_ERROR_EQUAL(instance_id, number_id, number, compare_to_id, number_to_compare_to, add_msg) error_on_equal(__FILE__, __LINE__, instance_id, number_id, number, compare_to_id, number_to_compare_to, add_msg)
+
+template<typename N1, typename N2>
 inline void error_on_greater_than(const std::string& file, int line, const std::string& instance_id, const std::string& number_id, N1 number, const std::string& compare_to_id, N2 number_to_compare_to, const std::string& additional_message = "")
 {
-    std::stringstream error_msg;
     if (number > static_cast<decltype(number)>(number_to_compare_to))
     {
+        std::stringstream error_msg;
         error_msg << number_id << "(=" << number << ") is greater than: " << compare_to_id << "(=" << number_to_compare_to << ")" << std::endl;
         err_details::cldnn_print_error_message(file, line, instance_id, error_msg, additional_message);
     }
@@ -60,9 +70,9 @@ inline void error_on_greater_than(const std::string& file, int line, const std::
 template<typename N1, typename N2>
 inline void error_on_less_than(const std::string& file, int line, const std::string& instance_id, const std::string& number_id, N1 number, const std::string& compare_to_id, N2 number_to_compare_to, const std::string& additional_message = "")
 {
-    std::stringstream error_msg;
     if (number < static_cast<decltype(number)>(number_to_compare_to))
     {
+        std::stringstream error_msg;
         error_msg << number_id << "(=" << number << ") is less than: " << compare_to_id << "(=" << number_to_compare_to << ")" << std::endl;
         err_details::cldnn_print_error_message(file, line, instance_id, error_msg, additional_message);
     }
@@ -72,9 +82,9 @@ inline void error_on_less_than(const std::string& file, int line, const std::str
 template<typename N1, typename N2>
 inline void error_on_less_or_equal_than(const std::string& file, int line, const std::string& instance_id, const std::string& number_id, N1 number, const std::string& compare_to_id, N2 number_to_compare_to, const std::string& additional_message = "")
 {
-    std::stringstream error_msg;
     if (number <= static_cast<decltype(number)>(number_to_compare_to))
     {
+        std::stringstream error_msg;
         error_msg << number_id << "(=" << number << ") is less or equal than: " << compare_to_id << "(=" << number_to_compare_to << ")" << std::endl;
         err_details::cldnn_print_error_message(file, line, instance_id, error_msg, additional_message);
     }
@@ -84,9 +94,9 @@ inline void error_on_less_or_equal_than(const std::string& file, int line, const
 template<typename N1, typename N2>
 inline void error_on_greater_or_equal_than(const std::string& file, int line, const std::string& instance_id, const std::string& number_id, N1 number, const std::string& compare_to_id, N2 number_to_compare_to, const std::string& additional_message = "")
 {
-    std::stringstream error_msg;
     if (number >= static_cast<decltype(number)>(number_to_compare_to))
     {
+        std::stringstream error_msg;
         error_msg << number_id << "(=" << number << ") is greater or equal than: " << compare_to_id << "(=" << number_to_compare_to << ")" << std::endl;
         err_details::cldnn_print_error_message(file, line, instance_id, error_msg, additional_message);
     }
@@ -96,9 +106,9 @@ inline void error_on_greater_or_equal_than(const std::string& file, int line, co
 template<typename ptr>
 inline void error_on_nullptr(const std::string& file, int line, const std::string& instance_id, const std::string& condition_id, ptr condition, const std::string& additional_message = "")
 {
-    std::stringstream error_msg;
     if (condition == nullptr)
     {
+        std::stringstream error_msg;
         error_msg << condition_id << " should not be null" << std::endl;
         err_details::cldnn_print_error_message(file, line, instance_id, error_msg, additional_message);
     }
@@ -108,7 +118,6 @@ inline void error_on_nullptr(const std::string& file, int line, const std::strin
 template<typename M = format, typename... Ms>
 inline void error_on_not_proper_enum_values(const std::string& file, int line, const std::string& instance_id, const std::string& mode_id, M mode, const std::string& modes_id, Ms... modes_to_compare_to)
 {
-    std::stringstream error_msg;
     auto enum_value_string = [](const M& mode)->std::string {
         if (std::is_same<M, format::type>::value)
         {
@@ -119,6 +128,7 @@ inline void error_on_not_proper_enum_values(const std::string& file, int line, c
     const std::array<const M, sizeof...(Ms)> modes{ std::forward<Ms>(modes_to_compare_to)... };
     if (std::all_of(modes.begin(), modes.end(), [&](const M& m)->int {return mode != m; }))
     {
+        std::stringstream error_msg;
         error_msg << mode_id << "( " << enum_value_string(mode) << " ) is incompatible with " << modes_id << ". Should be one of: ";
         for (const auto& ms : modes)
         {
@@ -142,8 +152,9 @@ void error_on_mismatch_layout(const std::string& file, int line, const std::stri
 void error_on_bool(const std::string& file, int line, const std::string& instance_id, const std::string& condition_id, bool condition, const std::string& additional_message = "");
 #define CLDNN_ERROR_BOOL(instance_id, condition_id, condition, add_msg) error_on_bool(__FILE__, __LINE__, instance_id, condition_id, condition, add_msg)
 
-void error_on_mismatching_data_types(const std::string& file, int line, const std::string& instance_id, const std::string& data_format_1_id, data_types data_format_1, const std::string& data_format_2_id, data_types data_format_2, const std::string& additional_message = "");
+void error_on_mismatching_data_types(const std::string& file, int line, const std::string& instance_id, const std::string& data_format_1_id, data_types data_format_1, const std::string& data_format_2_id, data_types data_format_2, const std::string& additional_message = "", bool ignore_sign = false);
 #define CLDNN_ERROR_DATA_TYPES_MISMATCH(instance_id, data_format_1_id, data_format_1, data_format_2_id, data_format_2, add_msg) error_on_mismatching_data_types(__FILE__, __LINE__, instance_id, data_format_1_id, data_format_1, data_format_2_id, data_format_2, add_msg)
+#define CLDNN_ERROR_DATA_TYPES_MISMATCH_IGNORE_SIGN(instance_id, data_format_1_id, data_format_1, data_format_2_id, data_format_2, add_msg) error_on_mismatching_data_types(__FILE__, __LINE__, instance_id, data_format_1_id, data_format_1, data_format_2_id, data_format_2, add_msg, true)
 
 void error_on_tensor_dims_less_than_other_tensor_dims(const std::string& file, int line, const std::string& instance_id, const std::string& tensor_id, const tensor& tens, const std::string& tensor_to_compare_to_id, const tensor& tens_to_compre, const std::string& additional_message = "");
 #define CLDNN_ERROR_TENSOR_SIZES_LESS_THAN(instance_id, tensor_id, tensor_1, compare_to_id, tensor_to_compare_to, ...) error_on_tensor_dims_less_than_other_tensor_dims(__FILE__, __LINE__, instance_id, tensor_id, tensor_1, compare_to_id, tensor_to_compare_to, __VA_ARGS__)