From 49a0ae551d6abeb1c53d2ee6256bf7e8747675b4 Mon Sep 17 00:00:00 2001
From: pawelpiotrowicz <48519735+pawelpiotrowicz@users.noreply.github.com>
Date: Thu, 29 Aug 2019 19:22:48 +0200
Subject: [PATCH] no_fork : Remove allocation for empty vector (#3544)

* no_fork : Remove allication for empty vector

* style
---
 src/ngraph/op/constant.hpp | 38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)

diff --git a/src/ngraph/op/constant.hpp b/src/ngraph/op/constant.hpp
index 22df21677..a7d4aeb5d 100644
--- a/src/ngraph/op/constant.hpp
+++ b/src/ngraph/op/constant.hpp
@@ -95,37 +95,39 @@ namespace ngraph
                     ", expected ",
                     shape_size(m_shape),
                     ".");
-
-                if (type.is_integral())
+                if (values.size())
                 {
-                    if (type.is_signed())
+                    if (type.is_integral())
                     {
-                        std::vector<int64_t> dvalues = parse_string<int64_t>(values);
-                        if (values.size() == 1 && shape_size(m_shape) != 1)
+                        if (type.is_signed())
                         {
-                            dvalues = std::vector<int64_t>(shape_size(m_shape), dvalues[0]);
+                            std::vector<int64_t> dvalues = parse_string<int64_t>(values);
+                            if (values.size() == 1 && shape_size(m_shape) != 1)
+                            {
+                                dvalues = std::vector<int64_t>(shape_size(m_shape), dvalues[0]);
+                            }
+                            write_values(dvalues);
+                        }
+                        else
+                        {
+                            std::vector<uint64_t> dvalues = parse_string<uint64_t>(values);
+                            if (values.size() == 1 && shape_size(m_shape) != 1)
+                            {
+                                dvalues = std::vector<uint64_t>(shape_size(m_shape), dvalues[0]);
+                            }
+                            write_values(dvalues);
                         }
-                        write_values(dvalues);
                     }
                     else
                     {
-                        std::vector<uint64_t> dvalues = parse_string<uint64_t>(values);
+                        std::vector<double> dvalues = parse_string<double>(values);
                         if (values.size() == 1 && shape_size(m_shape) != 1)
                         {
-                            dvalues = std::vector<uint64_t>(shape_size(m_shape), dvalues[0]);
+                            dvalues = std::vector<double>(shape_size(m_shape), dvalues[0]);
                         }
                         write_values(dvalues);
                     }
                 }
-                else
-                {
-                    std::vector<double> dvalues = parse_string<double>(values);
-                    if (values.size() == 1 && shape_size(m_shape) != 1)
-                    {
-                        dvalues = std::vector<double>(shape_size(m_shape), dvalues[0]);
-                    }
-                    write_values(dvalues);
-                }
                 constructor_validate_and_infer_types();
             }
 
-- 
2.18.0