You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

dual_abi_helper.h 7.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /**
  2. * Copyright 2021 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #ifndef MINDSPORE_INCLUDE_API_DUAL_ABI_HELPER_H_
  17. #define MINDSPORE_INCLUDE_API_DUAL_ABI_HELPER_H_
  18. #include <algorithm>
  19. #include <map>
  20. #include <memory>
  21. #include <optional>
  22. #include <string>
  23. #include <set>
  24. #include <unordered_map>
  25. #include <utility>
  26. #include <vector>
  27. namespace mindspore {
  28. inline std::vector<char> StringToChar(const std::string &s) { return std::vector<char>(s.begin(), s.end()); }
  29. inline std::string CharToString(const std::vector<char> &c) { return std::string(c.begin(), c.end()); }
  30. inline std::optional<std::vector<char>> OptionalStringToChar(const std::optional<std::string> &s) {
  31. if (s == std::nullopt) return std::nullopt;
  32. std::optional<std::vector<char>> ret = std::vector<char>(s->begin(), s->end());
  33. return ret;
  34. }
  35. inline std::optional<std::string> OptionalCharToString(const std::optional<std::vector<char>> &c) {
  36. if (c == std::nullopt) return std::nullopt;
  37. std::optional<std::string> ret = std::string(c->begin(), c->end());
  38. return ret;
  39. }
  40. inline std::pair<std::vector<char>, int32_t> PairStringToChar(const std::pair<std::string, int32_t> &s) {
  41. return std::pair<std::vector<char>, int32_t>(std::vector<char>(s.first.begin(), s.first.end()), s.second);
  42. }
  43. inline std::pair<std::string, int32_t> PairCharToString(const std::pair<std::vector<char>, int32_t> &c) {
  44. return std::pair<std::string, int32_t>(std::string(c.first.begin(), c.first.end()), c.second);
  45. }
  46. inline std::vector<std::vector<char>> VectorStringToChar(const std::vector<std::string> &s) {
  47. std::vector<std::vector<char>> ret;
  48. std::transform(s.begin(), s.end(), std::back_inserter(ret),
  49. [](auto str) { return std::vector<char>(str.begin(), str.end()); });
  50. return ret;
  51. }
  52. inline std::vector<std::string> VectorCharToString(const std::vector<std::vector<char>> &c) {
  53. std::vector<std::string> ret;
  54. std::transform(c.begin(), c.end(), std::back_inserter(ret),
  55. [](auto ch) { return std::string(ch.begin(), ch.end()); });
  56. return ret;
  57. }
  58. inline std::set<std::vector<char>> SetStringToChar(const std::set<std::string> &s) {
  59. std::set<std::vector<char>> ret;
  60. std::transform(s.begin(), s.end(), std::inserter(ret, ret.begin()),
  61. [](auto str) { return std::vector<char>(str.begin(), str.end()); });
  62. return ret;
  63. }
  64. inline std::set<std::string> SetCharToString(const std::set<std::vector<char>> &c) {
  65. std::set<std::string> ret;
  66. std::transform(c.begin(), c.end(), std::inserter(ret, ret.begin()),
  67. [](auto ch) { return std::string(ch.begin(), ch.end()); });
  68. return ret;
  69. }
  70. inline std::map<std::vector<char>, int32_t> MapStringToChar(const std::map<std::string, int32_t> &s) {
  71. std::map<std::vector<char>, int32_t> ret;
  72. std::transform(s.begin(), s.end(), std::inserter(ret, ret.begin()), [](auto str) {
  73. return std::pair<std::vector<char>, int32_t>(std::vector<char>(str.first.begin(), str.first.end()), str.second);
  74. });
  75. return ret;
  76. }
  77. inline std::map<std::string, int32_t> MapCharToString(const std::map<std::vector<char>, int32_t> &c) {
  78. std::map<std::string, int32_t> ret;
  79. std::transform(c.begin(), c.end(), std::inserter(ret, ret.begin()), [](auto ch) {
  80. return std::pair<std::string, int32_t>(std::string(ch.first.begin(), ch.first.end()), ch.second);
  81. });
  82. return ret;
  83. }
  84. inline std::map<std::vector<char>, std::vector<char>> UnorderedMapStringToChar(
  85. const std::unordered_map<std::string, std::string> &s) {
  86. std::map<std::vector<char>, std::vector<char>> ret;
  87. std::transform(s.begin(), s.end(), std::inserter(ret, ret.begin()), [](auto str) {
  88. return std::pair<std::vector<char>, std::vector<char>>(std::vector<char>(str.first.begin(), str.first.end()),
  89. std::vector<char>(str.second.begin(), str.second.end()));
  90. });
  91. return ret;
  92. }
  93. inline std::unordered_map<std::string, std::string> UnorderedMapCharToString(
  94. const std::map<std::vector<char>, std::vector<char>> &c) {
  95. std::unordered_map<std::string, std::string> ret;
  96. std::transform(c.begin(), c.end(), std::inserter(ret, ret.begin()), [](auto ch) {
  97. return std::pair<std::string, std::string>(std::string(ch.first.begin(), ch.first.end()),
  98. std::string(ch.second.begin(), ch.second.end()));
  99. });
  100. return ret;
  101. }
  102. inline std::vector<std::pair<std::vector<char>, std::vector<int32_t>>> ClassIndexStringToChar(
  103. const std::vector<std::pair<std::string, std::vector<int32_t>>> &s) {
  104. std::vector<std::pair<std::vector<char>, std::vector<int32_t>>> ret;
  105. std::transform(s.begin(), s.end(), std::back_inserter(ret), [](auto str) {
  106. return std::pair<std::vector<char>, std::vector<int32_t>>(std::vector<char>(str.first.begin(), str.first.end()),
  107. str.second);
  108. });
  109. return ret;
  110. }
  111. inline std::vector<std::pair<std::string, std::vector<int32_t>>> ClassIndexCharToString(
  112. const std::vector<std::pair<std::vector<char>, std::vector<int32_t>>> &c) {
  113. std::vector<std::pair<std::string, std::vector<int32_t>>> ret;
  114. std::transform(c.begin(), c.end(), std::back_inserter(ret), [](auto ch) {
  115. return std::pair<std::string, std::vector<int32_t>>(std::string(ch.first.begin(), ch.first.end()), ch.second);
  116. });
  117. return ret;
  118. }
  119. inline std::vector<std::pair<std::vector<char>, int64_t>> PairStringInt64ToPairCharInt64(
  120. const std::vector<std::pair<std::string, int64_t>> &s) {
  121. std::vector<std::pair<std::vector<char>, int64_t>> ret;
  122. std::transform(s.begin(), s.end(), std::back_inserter(ret), [](auto str) {
  123. return std::pair<std::vector<char>, int64_t>(std::vector<char>(str.first.begin(), str.first.end()), str.second);
  124. });
  125. return ret;
  126. }
  127. template <class T>
  128. inline std::map<std::vector<char>, T> PadInfoStringToChar(const std::map<std::string, T> &s_pad_info) {
  129. std::map<std::vector<char>, T> ret;
  130. std::transform(s_pad_info.begin(), s_pad_info.end(), std::inserter(ret, ret.begin()), [](auto str) {
  131. return std::pair<std::vector<char>, T>(std::vector<char>(str.first.begin(), str.first.end()), str.second);
  132. });
  133. return ret;
  134. }
  135. template <class T>
  136. inline std::map<std::string, T> PadInfoCharToString(const std::map<std::vector<char>, T> &c_pad_info) {
  137. std::map<std::string, T> ret;
  138. std::transform(c_pad_info.begin(), c_pad_info.end(), std::inserter(ret, ret.begin()), [](auto ch) {
  139. return std::pair<std::string, T>(std::string(ch.first.begin(), ch.first.end()), ch.second);
  140. });
  141. return ret;
  142. }
  143. template <class T>
  144. inline void TensorMapCharToString(const std::map<std::vector<char>, T> *c, std::unordered_map<std::string, T> *s) {
  145. for (auto ch : *c) {
  146. auto key = std::string(ch.first.begin(), ch.first.end());
  147. auto val = ch.second;
  148. s->insert(std::pair<std::string, T>(key, val));
  149. }
  150. }
  151. } // namespace mindspore
  152. #endif // MINDSPORE_INCLUDE_API_DUAL_ABI_HELPER_H_