Dynalib Utils
StringWrapper.h
Go to the documentation of this file.
1 //
2 // Created by Ken Kopelson on 26/10/17.
3 //
4 
5 #ifndef STRINGWRAPPER_H
6 #define STRINGWRAPPER_H
7 
8 
9 #include "Utilities/IHashable.h"
10 #include "Utilities/HashCoder.h"
11 
12 template <class T> class StringWrapper : IHashable<T> {
13  T _value;
14 
15 public:
16  typedef T valueType;
17  StringWrapper() : _value() {}
18  StringWrapper(T v) : _value(v) {}
19  operator T() const { return _value; }
20 
21  T getValue() { return _value; }
22 
23  int hashCode() const override {
24  auto code = HashCoder();
25  code.add(_value);
26  return code.getCode();
27  }
28  bool operator== (const T &other) override {
29  return _value == other;
30  }
31  bool operator!= (const T &other) override {
32  return !(_value == other);
33  }
34 
35  // modifiers
36  StringWrapper& operator= (T v) { _value = v; return *this; }
37  StringWrapper& operator+= (T v) { _value += v; return *this; }
38 
39  // accessors
40  StringWrapper operator[] (size_t pos) {return StringWrapper(_value); }
41  StringWrapper operator[] (size_t pos) const {return StringWrapper(_value); }
42 
43  // friends
44  friend StringWrapper operator+ (StringWrapper iw, StringWrapper v) { return StringWrapper(iw._value + v._value); }
45  friend StringWrapper operator+ (StringWrapper iw, T v) { return StringWrapper(iw._value + v); }
46  friend StringWrapper operator+ (T v, StringWrapper iw) { return StringWrapper(v + iw._value); }
47 
48  friend StringWrapper operator<< (StringWrapper iw, StringWrapper v) { return StringWrapper(iw._value << v._value); }
49  friend StringWrapper operator<< (StringWrapper iw, T v) { return StringWrapper(iw._value << v); }
50  friend StringWrapper operator<< (T v, StringWrapper iw) { return StringWrapper(v << iw._value); }
51 
52  friend StringWrapper operator>> (StringWrapper iw, StringWrapper v) { return StringWrapper(iw._value >> v._value); }
53  friend StringWrapper operator>> (StringWrapper iw, T v) { return StringWrapper(iw._value >> v); }
54  friend StringWrapper operator>> (T v, StringWrapper iw) { return StringWrapper(v >> iw._value); }
55 
56  friend bool operator== (StringWrapper iw, StringWrapper v) { return iw._value == v._value; }
57  friend bool operator== (StringWrapper iw, T v) { return iw._value == v; }
58  friend bool operator== (T v, StringWrapper iw) { return v == iw._value; }
59 
60  friend bool operator!= (StringWrapper iw, StringWrapper v) { return !(iw._value == v._value); }
61  friend bool operator!= (StringWrapper iw, T v) { return !(iw._value == v); }
62  friend bool operator!= (T v, StringWrapper iw) { return !(v == iw._value); }
63 
64  friend bool operator< (StringWrapper iw, StringWrapper v) { return iw._value < v._value; }
65  friend bool operator< (StringWrapper iw, T v) { return iw._value < v; }
66  friend bool operator< (T v, StringWrapper iw) { return v < iw._value; }
67 
68  friend bool operator<= (StringWrapper iw, StringWrapper v) { return iw._value <= v._value; }
69  friend bool operator<= (StringWrapper iw, T v) { return iw._value <= v; }
70  friend bool operator<= (T v, StringWrapper iw) { return v <= iw._value; }
71 
72  friend bool operator> (StringWrapper iw, StringWrapper v) { return iw._value > v._value; }
73  friend bool operator> (StringWrapper iw, T v) { return iw._value > v; }
74  friend bool operator> (T v, StringWrapper iw) { return v > iw._value; }
75 
76  friend bool operator>= (StringWrapper iw, StringWrapper v) { return iw._value >= v._value; }
77  friend bool operator>= (StringWrapper iw, T v) { return iw._value >= v; }
78  friend bool operator>= (T v, StringWrapper iw) { return v >= iw._value; }
79 };
80 
81 #endif //STRINGWRAPPER_H
T getValue()
Definition: StringWrapper.h:21
Definition: IHashable.h:10
bool operator!=(const T &other) override
Definition: StringWrapper.h:31
StringWrapper & operator+=(T v)
Definition: StringWrapper.h:37
Definition: HashCoder.h:41
friend bool operator>=(StringWrapper iw, StringWrapper v)
Definition: StringWrapper.h:76
Definition: StringWrapper.h:12
int hashCode() const override
Definition: StringWrapper.h:23
friend bool operator>(StringWrapper iw, StringWrapper v)
Definition: StringWrapper.h:72
T valueType
Definition: StringWrapper.h:16
friend bool operator<=(StringWrapper iw, StringWrapper v)
Definition: StringWrapper.h:68
StringWrapper(T v)
Definition: StringWrapper.h:18
bool operator==(const T &other) override
Definition: StringWrapper.h:28
friend StringWrapper operator<<(StringWrapper iw, StringWrapper v)
Definition: StringWrapper.h:48
StringWrapper()
Definition: StringWrapper.h:17
friend StringWrapper operator+(StringWrapper iw, StringWrapper v)
Definition: StringWrapper.h:44
StringWrapper & operator=(T v)
Definition: StringWrapper.h:36
friend bool operator<(StringWrapper iw, StringWrapper v)
Definition: StringWrapper.h:64
StringWrapper operator[](size_t pos)
Definition: StringWrapper.h:40
friend StringWrapper operator>>(StringWrapper iw, StringWrapper v)
Definition: StringWrapper.h:52