ORIGINAL
Loading...
Searching...
No Matches
containerAdapter.h
1#ifndef CONTAINERADAPTER_H
2#define CONTAINERADAPTER_H
3#include "baseList.h"
4#include "types.h"
5#include "printable.h"
6
7namespace original {
8 template <typename TYPE, template <typename> typename SERIAL>
9 requires ExtendsOf<baseList<TYPE>, SERIAL<TYPE>>
10 class containerAdapter : public printable, public container<TYPE>{
11 protected:
12 SERIAL<TYPE> serial_;
13
14 explicit containerAdapter(const SERIAL<TYPE>& serial);
15 public:
16 [[nodiscard]] uint32_t size() const override;
17 void clear();
18 bool contains(const TYPE &e) const override;
19 [[nodiscard]] std::string className() const override;
20 [[nodiscard]] std::string toString(bool enter) const override;
21 ~containerAdapter() override = default;
22 };
23}
24
25 template<typename TYPE, template <typename> typename SERIAL>
27 original::containerAdapter<TYPE, SERIAL>::containerAdapter(const SERIAL<TYPE>& serial)
28 : serial_(serial) {}
29
30 template<typename TYPE, template <typename> typename SERIAL>
31 requires original::ExtendsOf<original::baseList<TYPE>, SERIAL<TYPE>>
32 auto original::containerAdapter<TYPE, SERIAL>::size() const -> uint32_t {
33 return serial_.size();
34 }
35
36 template<typename TYPE, template <typename> typename SERIAL>
37 requires original::ExtendsOf<original::baseList<TYPE>, SERIAL<TYPE>>
38 auto original::containerAdapter<TYPE, SERIAL>::clear() -> void {
39 serial_.clear();
40 }
41
42 template<typename TYPE, template <typename> class SERIAL>
43 requires original::ExtendsOf<original::baseList<TYPE>, SERIAL<TYPE>>
44 auto original::containerAdapter<TYPE, SERIAL>::contains(const TYPE &e) const -> bool {
45 return serial_.contains(e);
46 }
47
48 template<typename TYPE, template <typename> typename SERIAL>
49 requires original::ExtendsOf<original::baseList<TYPE>, SERIAL<TYPE>>
50 auto original::containerAdapter<TYPE, SERIAL>::className() const -> std::string {
51 return "containerAdapter";
52 }
53
54 template<typename TYPE, template <typename> typename SERIAL>
55 requires original::ExtendsOf<original::baseList<TYPE>, SERIAL<TYPE>>
56 auto original::containerAdapter<TYPE, SERIAL>::toString(const bool enter) const -> std::string {
57 std::stringstream ss;
58 ss << this->className() << "(";
59 bool first = true;
60 for (const auto e : this->serial_)
61 {
62 if (!first) ss << ", ";
63 ss << printable::formatString(e);
64 first = false;
65 }
66 ss << ")";
67 if (enter) ss << "\n";
68 return ss.str();
69 }
70
71#endif //CONTAINERADAPTER_H
Definition container.h:10
Definition printable.h:9
Definition serial.h:8
Definition types.h:37