Realm C++ SDK Versão C++ v2.2.0

managed_string.hpp

1
2//
3// Autores 2024 Realm Inc.
4//
5// Licenciado sob a Licença Apache, Versão 2.0 (a "Licença");
6// você não pode usar este arquivo, exceto em conformidade com a Licença.
7// Você pode obter uma cópia da Licença em
8//
9// http://www.apache.org/license/LICENSE-2.0
10//
11// A menos que exigido pela lei aplicável ou acordado por escrito, o software
12// distribuído sob a Licença é distribuído "Como está",
13// sem garantias ou condições de qualquer tipo, Express ou implícitas.
14// Consulte a Licença para obter as permissões específicas de domínio do idioma e
15// limitações da Licença.
16//
18
19#ifndef CPPREALM_MANAGED_STRING_HPP
20#define CPPREALM_MANAGED_STRING_HPP
21
22#include <cprealm/macros.hpp>
23
24namespace Realm {
25 classe rbool;
26}
27
28namespace Realm {
29 //Marca: - referência de caractere
30 estrutura, estrutura chart_reference {
31 chart_reference& operator =(caracteres c);
32 privado:
33 chart_reference(managed<std::string>* principal, size_t idx);
34 template <typename, typename> help struct realm::managed;
35 amigo estrutura, estrutura chart_pointer;
36 managed<std::string>* m_parent;
37 size_t m_idx;
38 };
39 //Marca: - referência de caractere const
40 estrutura, estrutura const_char_reference {
41 operador chart() const; //NOLINT(google-explicit-constructor)
42 privado:
43 const_char_reference(const managed<std::string>* pai, size_t idx);
44 template <typename, typename> help struct realm::managed;
45 amigo estrutura, estrutura const_char_pointer;
46 const managed<std::string>* m_parent;
47 size_t m_idx;
48 };
49 //Marca: - ponteiro de caracteres
50 estrutura, estrutura chart_pointer {
51 operador chart_reference [](tamanho_t idx);
52 privado:
53 explícito chart_pointer(managed<std::string>* pai);
54 template <typename, typename> help struct realm::managed;
55 managed<std::string>* m_parent;
56 };
57 //Marca: - ponteiro de caracteres const
58 estrutura, estrutura const_char_pointer {
59 operador const_char_reference [](tamanho_t idx) const;
60 privado:
61 explícito const_char_pointer(const managed<std::string>* principal);
62 template <typename, typename> help struct realm::managed;
63 const managed<std::string>* m_parent;
64 };
65
66 //Marca: - string gerenciada
67 template <> struct managed<std::string> : managed_base {
68 usando value_type = std::string;
69 Usando gerenciado<std::string>::managed_base::managed_base;
70 Usando gerenciado<std::string>::managed_base::operator=;
71
72 [[nodiscard]] std::string detach() const;
73
76
77 operador & gerenciado=(std::string&& v) { set(std::move(v)); retornar *isso; }
78 managed& operator =(const std::string& v) { set(v); retornar *isso; }
79 operador & gerenciado=(const chart* v) { set(v); retornar *isso; }
80
81 //Marca: - acesso ao elemento
83 referência at(size_t idx);
85 operador de referência [](size_t idx);
86
88 [[nodiscard]] const_reference front() const;
89 frente de referência ();
91 [[nodiscard]] const_reference back() const;
92 referência de volta();
94 chart_pointer data();
95 [[nodiscard]] const_char_pointer data() const;
96
98 [[nodiscard]] const_char_pointer c_str() const;
99
101 operador std::string_view() const = excluir;
102 operador std::string() const;
103
104
105 [[nodiscard]] size_t size() const noexceto;
106 //Marca: - operações
107 vazio clear() noexceto;
108 push_back nulo (caracteres c);
110 managed& append(const std::string&);
112 managed& operator+=(const std::string&);
114 vazio pop_back();
115
116 //Marca: - operadores de comparação
117 rbool operator==(const std::string& rhs) const noexceto;
118 rbool operator==(const chart * rhs) const noexceto ;
119 operador de rbool !=(const std::string& rhs) const noexceto;
120 operador de rbool !=(const chart * rhs) const noexceto ;
121 rbool contains(const std::string &s, bool case_sensitive = true) const noexceto;
122 rbool empty() const noexceto;
123 privado:
124 estrutura de amigo Chart_reference;
125 estrutura de amigo const_char_reference;
126 vazio inline set(const std::string& v) { m_obj->template set<std::string>(m_key, v); }
127 [[nodiscard]] inline std::string get() const { return m_obj->get<std::string>(m_key); }
128 managed() = padrão;
129 managed(const managed&) = delete;
130 managed(managed &&) = excluir;
131 managed& operator=(const managed&) = excluir;
132 managed& operator=(managed&&) = excluir;
133 modelo<typename, typename>
134 amigo estrutura managed;
135 };
136
137 template <> struct managed<std::optional<std::string>> final : public managed<std::string> {
138 usando value_type = std::opcional<std::string>;
139 Usando gerenciado<std::string>::operator=;
140 managed& operator =(std::optional<std::string>&& v) { set(std::move(v)); retornar *isso; }
141 managed& operator =(const std::optional<std::string>& v) { set(v); retornar *isso; }
142 operador & gerenciado=(const chart* v) { set(v); retornar *isso; }
143
144 [[nodiscard]] std::opcional<std::string> detach() const {
145 return m_obj->template get_optional<std::string>(m_key);
146 }
147
148 [[nodiscard]] std::opcional<std::string> operador *() const {
149 return desvincular();
150 }
151
152 [[nodiscard]] operador std::opcional<std::string>() const {
153 return desvincular();
154 }
155
156 rbool operator==(const std::opcional<std::string>& rhs) const noexceto;
157 operador rbool !=(const std::optional<std::string>& rhs) const noexceto;
158 privado:
159 vazio inline set(const std::optional<std::string>& v) { m_obj->template set<std::optional<std::string>>(m_key, v); }
160 managed() = default;
161 managed(const managed&) = delete;
162 managed(managed &&) = delete;
163 managed& operator=(const managed&) = delete;
164 managed& operator=(managed&&) = delete;
165 modelo<typename, typename>
166 amigo estrutura, estrutura managed;
167 };
168}
169
170#endif //CPPrealm_MANAGED_STRING_HPP
Definição: rbool.hpp:36
Definição: managed_string.hpp:50
Definição: managed_string.hpp:30
Definição: managed_string.hpp:58
Definição: managed_string.hpp:40
Definição: managed_string.hpp:67
Definição: macros.hpp:286
Definição: obj.hpp:62