24 #include <unordered_map>
32 std::string
ToUpper(std::string str);
34 std::string
ToLower(std::string str);
37 std::string
ToString(
const std::unordered_map<std::string, std::string> &meta);
45 [[nodiscard]] std::string
name()
const {
return name_; }
58 bool Contains(
const std::vector<std::shared_ptr<T>> &list,
const std::shared_ptr<T> &item) {
59 return std::find(std::begin(list), std::end(list), item) != std::end(list);
64 bool Contains(
const std::vector<std::weak_ptr<T>> &list,
const std::weak_ptr<T> &item) {
65 return std::find(std::begin(list), std::end(list), item) != std::end(list);
70 bool Contains(
const std::vector<T *> &list, T *item) {
71 return std::find(std::begin(list), std::end(list), item) != std::end(list);
76 void Append(std::vector<T> *list_a,
const std::vector<T> &list_b) {
77 list_a->insert(list_a->end(), list_b.begin(), list_b.end());
82 std::vector<T>
Merge(std::initializer_list<std::vector<T>> lists) {
83 std::vector<T> result;
84 for (
const auto &l : lists) {
85 result.insert(result.end(), l.begin(), l.end());
91 template<
typename T,
typename U>
92 std::vector<T>
Merge(std::initializer_list<std::unordered_map<T, U>> lists) {
93 std::vector<T> result;
94 for (
const auto &l : lists) {
95 result.insert(result.end(), l.begin(), l.end());
108 bool Remove(std::vector<std::shared_ptr<T>> *list,
const std::shared_ptr<T> &item) {
109 auto it = std::find(std::begin(*list), std::end(*list), item);
110 if (it != std::end(*list)) {
125 std::vector<T *>
ToRawPointers(
const std::vector<std::shared_ptr<T>> &list) {
126 std::vector<T *> result;
127 for (
auto &value : list) {
128 result.push_back(value.get());
140 std::vector<T *>
ToRawPointers(
const std::vector<std::unique_ptr<T>> &list) {
141 std::vector<T *> result;
142 for (
auto &value : list) {
143 result.push_back(value.get());
154 template<
typename T,
typename U>
155 std::vector<T *>
As(
const std::vector<U *> &vec) {
156 std::vector<T *> result;
157 for (
auto &value : vec) {
158 result.push_back(
dynamic_cast<T *
>(value));
165 std::vector<T>
Unique(
const std::vector<T> &vec) {
167 auto last = std::unique(result.begin(), result.end());
168 result.erase(last, result.end());
175 auto last = std::unique(vec->begin(), vec->end());
176 vec->erase(last, vec->end());
186 return "UNKOWN TYPE";
190 void CreateDir(
const std::string &dir_name);