Realm C++ SDK 버전 v2.2.0

managed_string.hpp

1
2//
3//저작권 2024 Realm Inc.
4//
5// Apache 라이선스, 버전 2.0("라이선스")에 따라 라이선스가 부여됩니다.
6// 라이선스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다.
7// 다음에서 라이선스 사본을 얻을 수 있습니다.
8//
9// http://www.apache.org/licences/LICENSE-2.0
10//
11// 관련 법률에서 요구하거나 문서로 동의하지 않는 한, 소프트웨어
12// 라이선스에 따라 배포되는 것은 '있는 그대로' 배포됩니다,
13// Express 묵시적이든 어떤 종류의 보증이나 조건도 제공하지 않습니다.
14// 권한을 관리하는 특정 언어에 대한 내용은 라이선스를 참조하세요.
15// 라이선스에 따른 제한 사항.
16//
18
19#ifndef CPPREALM_MANAGED_STRING_HPP
20#define CPPRALM_MANAGED_STRING_HPP
21
22#include <cpprealm/macros.hpp>
23
24네임스페이스 영역 {
25 클래스 rbool;
26}
27
28네임스페이스 영역 {
29 //MARK: - 문자 참조
30 구조체 char_reference {
31 char_reference& 연산자 =(char c);
32 private:
33 char_reference(managed<std::string>* parent, size_t idx);
34 템플릿 <typename, typename> 친구 구조체 realm::managed;
35 친구 구조체 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(const managed<std::string>* parent, size_t idx);
44 템플릿 <typename, typename> 친구 구조체 realm::managed;
45 친구 구조체 const_char_pointer;
46 const managed<std::string>* m_parent;
47 size_t m_idx;
48 };
49 //MARK: - 문자 포인터
50 구조체 char_pointer {
51 char_reference 연산자 [](size_t idx);
52 private:
53 명시적 char_pointer(managed<std::string>* parent);
54 템플릿 <typename, typename> 친구 구조체 realm::managed;
55 managed<std::string>* m_parent;
56 };
57 //MARK: - const char 포인터
59 const_char_reference 연산자 [](size_t idx) const;
60 private:
61 명시적 const_char_pointer(const managed<std::string>* parent);
62 템플릿 <typename, typename> 친구 구조체 realm::managed;
63 const managed<std::string>* m_parent;
64 };
65
66 //MARK: - managed string
67 템플릿 <> struct managed<std::string> : managed_base {
68 using value_type = std::string;
69 사용 관리되는<std::string>::managed_base::managed_base;
70 사용 managed<std::string>::managed_base:: 연산자=;
71
72 [[nodiscard]] std::string fetch() const;
73
76
77 관리되는& 연산자 =(std::string&& v) { set(std::move(v)); return *this; }
78 관리되는& 연산자 =(const std::string& v) { set(v); return *this; }
79 관리되는& 연산자 =(const char* v) { set(v); return *this; }
80
81 //MARK: - 요소 액세스
83 참조 at(size_t idx);
85 참조 연산자[](size_t idx);
86
88 [[nodiscard]] const_reference 프런트() const;
89 참조 프런트();
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 연산자 std::string_view() const = delete;
102 연산자 std::string() const;
103
104
105 [[nodiscard]] size_t size() const noException;
106 //MARK: - 연산
107 clear () noException을 무효화합니다.
108 push_back (char c);
110 managed& append(const std::string&);
112 관리되는& 연산자+=(const std::string&);
114 'pop_back()'을 무효화 합니다.
115
116 //MARK: - 비교 연산자
117 rbool operator==(const std::string& rhs) const noException;
118 rbool 연산자==(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_critical = true) const noException;
122 rbool empty() const noException;
123 비공개:
124 친구 구조체 char_reference;
125 친구 구조체 const_char_reference;
126 oid 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() = 기본값;
129 managed(const managed&) = delete;
130 managed(managed &&) = 삭제;
131 managed& 연산자=(const managed&) = 삭제;
132 managed& operator=(managed&&) = delete;
133 템플릿<typename, typename>
134 친구 구조체 managed;
135 };
136
137 template <> struct managed<std::optional<std::string>> final : public managed<std::string> {
138 using value_type = std::optional<std::string>;
139 사용 관리되는<std::string>::operator=;
140 managed& 연산자 =(std::optional<std::string>&& v) { 설정하다(std::move(v)); return *this; }
141 managed& 연산자 =(const std::optional<std::string>& v) { 설정하다(v); return *this; }
142 관리되는& 연산자 =(const char* v) { set(v); return *this; }
143
144 [[nodiscard]] std::optional<std::string> fetch() const {
145 return m_obj-> Template get_optional<std::string>(m_key);
146 }
147
148 [[nodiscard]] std::optional<std::string> 연산자 *() const {
149 return fetch();
150 }
151
152 [[nodiscard]] 연산자 std::optional<std::string>() const {
153 return fetch();
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 managed() = 기본값;
161 managed(const managed&) = delete;
162 managed ( managed &&) = delete ;
163 managed& 연산자=(const managed&) = delete;
164 managed& 연산자=(managed&&) = delete;
165 템플릿<typename, typename>
166 친구 구조체 managed 됨 ;
167 };
168}
169
170#endif //CPPREALM_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
정의: 매크로.hpp:286
정의: obj.hpp:62