xtd 0.2.0
emoticon.h
Go to the documentation of this file.
1 #pragma once
5 #include "../forms_export.h"
6 #include <xtd/iequatable>
7 #include <xtd/object>
8 #include <xtd/static>
9 #include <xtd/ustring>
10 #include <ostream>
11 #include <vector>
12 
14 namespace xtd {
16  namespace forms {
28  class forms_export_ emoticon : public object, public xtd::iequatable<emoticon> {
29  struct data;
30  public:
32 
35  static const emoticon empty();
36 
38 
43  emoticon(const xtd::ustring& name, std::initializer_list<char32> codepoints);
44 
48  emoticon(const xtd::ustring& name, const std::vector<char32>& codepoints);
49 
53  emoticon(const xtd::ustring& name, char32 codepoint);
54 
57  explicit emoticon(std::initializer_list<char32> codepoints);
58 
61  explicit emoticon(const std::vector<char32>& codepoints);
62 
65  explicit emoticon(char32 codepoint);
67 
69  template<typename type_t>
70  emoticon(const xtd::ustring& name, std::initializer_list<type_t> codepoints) {
71  create_data();
72  name_(name);
73  for (auto codepoint : codepoints)
74  codepoints_().push_back(static_cast<char32>(codepoint));
75  }
76 
77  template<typename type_t>
78  emoticon(const xtd::ustring& name, const std::vector<type_t>& codepoints) {
79  create_data();
80  name_(name);
81  for (auto codepoint : codepoints)
82  codepoints_().push_back(static_cast<char32>(codepoint));
83  }
84 
85  template<typename type_t>
86  emoticon(const xtd::ustring& name, type_t codepoint) {
87  create_data();
88  name_(name);
89  codepoints_({static_cast<char32>(codepoint)});
90  }
91 
92  template<typename type_t>
93  explicit emoticon(std::initializer_list<type_t> codepoints) {
94  create_data();
95  for (auto codepoint : codepoints)
96  codepoints_().push_back(static_cast<char32>(codepoint));
97  }
98 
99  template<typename type_t>
100  explicit emoticon(const std::vector<type_t>& codepoints) {
101  create_data();
102  for (auto codepoint : codepoints)
103  codepoints_().push_back(static_cast<char32>(codepoint));
104  }
105 
106  template<typename type_t>
107  explicit emoticon(type_t codepoint) {
108  create_data();
109  codepoints_({static_cast<char32>(codepoint)});
110  }
111 
112  emoticon();
113  emoticon(const emoticon& other);
114  emoticon& operator =(const emoticon& other);
116 
118 
122  const xtd::ustring& name() const noexcept;
123 
126  const std::vector<char32>& codepoints() const noexcept;
128 
130 
132  bool equals(const emoticon& value) const noexcept override;
133 
136  xtd::ustring to_string() const noexcept override;
138 
139  private:
140  void create_data();
141  void name_(const ustring& name);
142  std::vector<char32>& codepoints_();
143  void codepoints_(std::vector<char32>&& codepoints);
144 
145  std::shared_ptr<data> data_;
146  };
147  }
148 }
149 
151 inline xtd::ustring operator +(const xtd::forms::emoticon& value_a, const xtd::forms::emoticon& value_b) {
152  return value_a.to_string() + value_b.to_string();
153 }
154 
155 inline xtd::ustring operator +(const xtd::forms::emoticon& value_a, const char* value_b) {
156  return value_a.to_string() + value_b;
157 }
158 
159 inline xtd::ustring operator +(const xtd::forms::emoticon& value_a, const xtd::ustring& value_b) {
160  return value_a.to_string() + value_b;
161 }
162 
163 inline xtd::ustring operator +(const xtd::ustring& value_a, const xtd::forms::emoticon& value_b) {
164  return value_a + value_b.to_string();
165 }
166 
167 inline xtd::ustring operator +(const char* value_a, const xtd::forms::emoticon& value_b) {
168  return xtd::ustring(value_a) + value_b.to_string();
169 }
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:46
std::string to_string(const date_time &value, const std::string &fmt, const std::locale &loc)
Convert a specified value into a string with specified format and locale.
Definition: date_time.h:1063
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition: iequatable.h:18
xtd::ustring to_string() const noexcept override
Returns a string containing the codepoints of the emoticons.
The operating system is other.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes...
Definition: object.h:32
char32_t char32
Represents a 32-bit unicode character.
Definition: types.h:85
The xtd::forms namespace contains classes for creating Windows-based applications that take full adva...
Definition: about_box.h:13
Represent a emoticon with name and codepoints.
Definition: emoticon.h:28