1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
12 #include <unordered_set>
13 #include <unordered_map>
20 #include <ie_layers.h>
22 #include <vpu/utils/extra.hpp>
23 #include <vpu/utils/containers.hpp>
27 namespace ie = InferenceEngine;
34 void printTo(std::ostream& os, const T& val) noexcept;
36 template <typename T1, typename T2>
37 void printTo(std::ostream& os, const std::pair<T1, T2>& p) noexcept;
40 void printTo(std::ostream& os, const std::vector<T>& cont) noexcept;
42 template <typename T, size_t COUNT>
43 void printTo(std::ostream& os, const std::array<T, COUNT>& cont) noexcept;
46 void printTo(std::ostream& os, const std::set<T>& cont) noexcept;
48 template <typename T, class H>
49 void printTo(std::ostream& os, const std::unordered_set<T, H>& cont) noexcept;
51 template <typename K, typename V>
52 void printTo(std::ostream& os, const std::map<K, V>& map) noexcept;
54 template <typename K, typename V, class H>
55 void printTo(std::ostream& os, const std::unordered_map<K, V, H>& map) noexcept;
57 template <typename T, int Capacity>
58 void printTo(std::ostream& os, const SmallVector<T, Capacity>& cont) noexcept;
61 void printTo(std::ostream& os, const Any& any) noexcept;
64 void printTo(std::ostream& os, const AttributesMap& attrs) noexcept;
70 void formatPrint(std::ostream& os, const char* str) noexcept;
72 template <typename T, typename... Args>
73 void formatPrint(std::ostream& os, const char* str, const T& value, const Args&... args) noexcept;
79 template <typename... Args>
80 std::string formatString(const char* str, const Args&... args) noexcept;
87 std::string toString(const T& val) noexcept;
96 auto printToDefault(std::ostream& os, const T& val, int) noexcept -> decltype(os << val) {
100 std::cerr << "[VPU] Unknown error while printing\n";
105 template <typename T>
106 void printToDefault(std::ostream& os, const T& val, ...) noexcept {
108 os << "<value at " << &val << ">";
110 std::cerr << "[VPU] Unknown error while printing\n";
115 } // namespace details
117 template <typename T>
118 inline void printTo(std::ostream& os, const T& val) noexcept {
119 details::printToDefault(os, val, 0);
122 template <typename T1, typename T2>
123 void printTo(std::ostream& os, const std::pair<T1, T2>& p) noexcept {
125 os << "[" << std::endl;
128 printTo(os, p.first);
132 printTo(os, p.second);
137 std::cerr << "[VPU] Unknown error while printing\n";
142 template <class Cont>
143 void printContainer(std::ostream& os, const Cont& cont) noexcept {
148 for (const auto& val : cont) {
150 if (ind + 1 < cont.size()) {
162 std::cerr << "[VPU] Unknown error while printing\n";
167 template <typename T>
168 void printTo(std::ostream& os, const std::vector<T>& cont) noexcept {
169 printContainer(os, cont);
172 template <typename T, size_t COUNT>
173 void printTo(std::ostream& os, const std::array<T, COUNT>& cont) noexcept {
174 printContainer(os, cont);
177 template <typename T>
178 void printTo(std::ostream& os, const std::set<T>& cont) noexcept {
179 printContainer(os, cont);
182 template <typename T, class H>
183 void printTo(std::ostream& os, const std::unordered_set<T, H>& cont) noexcept {
184 printContainer(os, cont);
188 void printMap(std::ostream& os, const Map& map) noexcept {
190 os << "[" << std::endl;
193 for (const auto& p : map) {
194 printTo(os, p.first);
196 printTo(os, p.second);
207 std::cerr << "[VPU] Unknown error while printing\n";
212 template <typename K, typename V>
213 void printTo(std::ostream& os, const std::map<K, V>& map) noexcept {
217 template <typename K, typename V, class H>
218 void printTo(std::ostream& os, const std::unordered_map<K, V, H>& map) noexcept {
222 template <typename T, int Capacity>
223 void printTo(std::ostream& os, const SmallVector<T, Capacity>& cont) noexcept {
224 printContainer(os, cont);
227 template <typename T, typename... Args>
228 void formatPrint(std::ostream& os, const char* str, const T& value, const Args&... args) noexcept {
232 if (*(str + 1) == '%') {
236 formatPrint(os, str + 2, args...);
244 std::cerr << "[VPU] Unknown error while printing\n";
248 std::cerr << "[VPU] Extra arguments provided to formatPrint\n";
252 template <typename T>
253 std::string toString(const T& val) noexcept {
254 std::ostringstream os;
259 template <typename... Args>
260 std::string formatString(const char* str, const Args&... args) noexcept {
261 std::ostringstream os;
262 formatPrint(os, str, args...);