Tileson  1.3.0
A helpful json parser for Tiled maps
DecompressorContainer.hpp
Go to the documentation of this file.
1 //
2 // Created by robin on 30.07.2020.
3 //
4 
5 #ifndef TILESON_DECOMPRESSORCONTAINER_HPP
6 #define TILESON_DECOMPRESSORCONTAINER_HPP
7 
8 #include "../interfaces/IDecompressor.hpp"
9 #include <memory>
10 #include <vector>
11 #include <string_view>
12 #include <functional>
13 namespace tson
14 {
16  {
17  public:
18  inline DecompressorContainer() = default;
19  template <typename T, typename... Args>
20  inline void add(Args &&... args);
21  inline void remove(std::string_view name);
22  inline bool contains(std::string_view name) const;
23  inline bool empty() const;
24  inline size_t size() const;
25  inline void clear();
26 
27  inline IDecompressor<std::string_view, std::string> *get(std::string_view name);
28  private:
29  //Key: name,
30  std::vector<std::unique_ptr<IDecompressor<std::string_view, std::string>>> m_decompressors;
31  };
32 
33  template<typename T, typename... Args>
34  void DecompressorContainer::add(Args &&... args)
35  {
36  m_decompressors.emplace_back(new T(args...));
37  }
38 
44  bool DecompressorContainer::contains(std::string_view name) const
45  {
46  auto iter = std::find_if(m_decompressors.begin(), m_decompressors.end(), [&](const auto &item)
47  {
48  return item->name() == name;
49  });
50 
51  return iter != m_decompressors.end();
52  }
53 
58  void DecompressorContainer::remove(std::string_view name)
59  {
60  auto iter = std::remove_if(m_decompressors.begin(), m_decompressors.end(), [&](const auto &item)
61  {
62  return item->name() == name;
63  });
64  m_decompressors.erase(iter);
65  }
66 
68  {
69  return m_decompressors.size();
70  }
71 
78  {
79  auto iter = std::find_if(m_decompressors.begin(), m_decompressors.end(), [&](const auto &item)
80  {
81  return item->name() == name;
82  });
83 
84  return (iter != m_decompressors.end()) ? iter->get() : nullptr;
85  }
86 
92  {
93  return m_decompressors.empty();
94  }
95 
100  {
101  m_decompressors.clear();
102  }
103 }
104 #endif //TILESON_DECOMPRESSORCONTAINER_HPP
Definition: DecompressorContainer.hpp:16
bool contains(std::string_view name) const
Definition: DecompressorContainer.hpp:44
void remove(std::string_view name)
Definition: DecompressorContainer.hpp:58
void add(Args &&... args)
Definition: DecompressorContainer.hpp:34
bool empty() const
Definition: DecompressorContainer.hpp:91
IDecompressor< std::string_view, std::string > * get(std::string_view name)
Definition: DecompressorContainer.hpp:77
void clear()
Definition: DecompressorContainer.hpp:99
size_t size() const
Definition: DecompressorContainer.hpp:67
Definition: Base64.hpp:12