Realm C++ SDK版本 v 2.2.0

managed_string.hpp

1
2//
3// 版权所有 2024 Realm Inc.
4//
5// 根据 Apache 许可证 2.0 版(“许可证”)获得许可;
6// 除非符合合规,否则不得使用此文件。
7// 您可以在以下网址获取许可证副本:
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// 除非适用法律要求或书面同意,否则软件
12// 根据许可证分发是按“原样”分发的,
13// 不提供任何类型的Express或暗示的保证或条件。
14// 请参阅管理权限的特定语言的许可证和
15// 许可证下的限制。
16//
18
19#ifndef CPPREALM_MANAGED_STRING_HPP
20#define CPPREALM_MANAGED_STRING_HPP
21
22#include <cpprealm/macros.hpp>
23
24命名空间域 {
25 class rbool;
26 }
27
28命名空间域 {
29 //MARK: - char 引用
31 char_reference & Operator =( char c);
32 private :
33 char_reference ( managed<std::string> *parent, size_t idx);
34 template < typename , typename > Friend struct realm::managed ;
35 朋友 struct char_pointer
36 managed<std::string> * m_parent;
37 size_t m_idx;
38 };
39 //MARK: - const char 引用
41 操作符 char() const ; //NOLINT(google-explicit-constructor)
42 private :
43 const_char_reference ( constmanaged <std::string> *parent, size_t idx);
44 template < typename , typename > Friend struct realm::managed ;
45 朋友 struct const_char_pointer
46 const managed<std::string> * m_parent;
47 size_t m_idx;
48 };
49 //MARK: - char 指针
50 struct char_pointer {
51 char_reference Operator []( size_t idx);
52 private :
53 显式 char_pointer ( managed<std::string> *parent);
54 template < typename , typename > Friend struct realm::managed ;
55 managed<std::string> * m_parent;
56 };
57 //MARK: - const char 指针
59 const_char_reference Operator []( size_t idx) const ;
60 private :
61 显式 const_char_pointer ( constmanaged <std::string>*parent);
62 template < typename , typename > Friend struct realm::managed ;
63 const managed<std::string> * m_parent;
64 };
65
66 //MARK:-托管string
67 template <> structmanaged <std::string>: Managed_base { {
68 using value_type = std::string;
69 运用 managed <std::string>::managed_base::managed_base;
70 运用 托管 <std::string>::managed_base:: 操作符=;
71
72 [[nodiscard]] std::string 分离() const ;
73
74 运用 reference = char_reference
76
77 Managed & Operator =(std::string&& v) { set(std::move(v)); return * this ; }
78 Managed & Operator =( const std::string& v) { set(v); return * this ; }
79 Managed & Operator =( const char * v) { set(v); return * this ; }
80
81 //MARK: - 元素访问权限
83 引用at( size_t idx);
85 引用操作符[]( size_t idx);
86
88 [[nodiscard]] const_reference front() const ;
89 引用front();
91 [[nodiscard]] const_reference back() const ;
92 引用back();
94 char_pointer data();
95 [[nodiscard]] const_char_pointer data() const ;
96
98 [[nodiscard]] const_char_pointer c_str() const ;
99
101 Operator std::string_view() const = delete ;
102 操作符 std::string() const
103
104
105 [[nodiscard]] size_t size() const noException;
106 //MARK:- 操作
107 void clear() noException;
108 void push_back( char c);
110 managed & append(const std:: string &);
112 Managed & Operator+=(const std:: string &);
114 voidpop_back ();
115
116 //MARK:-比较操作符
117 rbool Operator==(const std:: string & rhs) const noException;
118 rbool Operator==(const char * rhs) const noException;
119 rbool操作符!=(const std:: string & rhs) const noException;
120 rbool操作符!=(const char * rhs) const noException;
121 rbool contains(const std:: string &s, bool case_sensitive = true) const noException;
122 rbool empty() const noException;
123私有:
124友元 struct char_reference
125友元 struct const_char_reference
126 void 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() = default ;
129 Managed( const Managed&) = delete ;
130 托管(托管 &&) = 删除 ;
131 Managed& 操作符=( const Managed&) = 删除 ;
132 Managed& Operator=(managed&&) = delete ;
133 template < typename , typename >
134 朋友 struct 托管;
135 };
136
137 template <> struct managed<std::optional<std::string>> final : public managed<std::string> {
138 using value_type = std::Optional<std::string>;
139 运用 managed <std::string>::operator=;
140 托管 & 操作符 =(std::Optional<std::string>&& v) { 设立(std::move(v)); return * this ; }
141 托管 & 操作符 =( const std::Optional<std::string>& v) { 设立(v); return * this ; }
142 Managed & Operator =( const char * v) { set(v); return * this ; }
143
144 [[nodiscard]] std::Optional<std::string> 分离() const {
145 return m_obj->template get_Optional<std::string>(m_key);
146 }
147
148 [[nodiscard]] std::Optional<std::string> 操作符 *() const {
149 return detach();
150 }
151
152 [[nodiscard]]操作符std::Optional<std::string>() const {
153 return detach();
154 }
155
156 rbool 操作符==( const std::Optional<std::string>& rhs) const noException ;
157 rbool操作符!=( const std::Optional<std::string>& rhs) const noException ;
158 private :
159 void inline 设立( const std::Optional<std::string>& v) { m_obj->template 设立<std::Optional<std::string>>(m_key, v); }
160 托管() = 默认;
161 托管 ( const 托管 &) = delete ;
162 托管 ( 托管 &&) = delete ;
163 托管 & 操作符=( const 托管 &) = delete ;
164 托管 & 操作符=( 托管 &&) = delete ;
165 template < typename , typename >
166 朋友 struct 托管
167 };
168 }
169
170#endif //CPREALM_MANAGED_STRING_HPP
定义: rbool.hpp:36
定义: managed_string.hpp: 50
定义: managed_string.hpp: 30
定义: managed_string.hpp: 58
定义: managed_string.hpp: 40
定义: managed_string.hpp: 67
定义: macros.hpp:286
定义: obj.hpp:62