19#ifndef CPPREALM_TYPES_HPP
20CPREALM_TypeS_HPP を定義する
27#include <cpprealm/ internal/bridge/realm.hpp>
28#include <cpprealm/ internal/bridge/schema.hpp>
29#include <cpprealm/ internal/type_info.hpp>
33 制約 size_t not_in_collection = - 1 、
36 explicit uuid (
const std::string &)。
37 uuid (
const std::array{uint 8 _t, 16 >========================================================
39 [[nodiscard]] std::string to_string()
const 。
40 [[nodiscard]] std::string to_base 64 ()
const 。
41 [[nodiscard]] std::array{uint 8 _t, 16 >
to_bytes () convert
45 テンプレート<
typename mapped_type>
49 インライン ブール演算子 ==(
const uuid & Lhs、
const uuid &rhs) {
return Lhs.m_uuid ==rhs.m_uuid を返す}
50 インライン ブール演算子 !=(
const uuid+ Lhs、
const uuid+ rhs) {
return Lhs.m_uuid !=rhs.m_uuid: }
51 インライン ブール演算子 >(
const uuidと Lhs、
const uuidと rhs){
return Lhs.m_uuid > rhs.m_uuid。 }
52 インライン ブール演算子 >=(
const uuid+ Lhs、
const uuid+ rhs) {
return Lhs.m_uuid >=rhs.m_uuid。 }
53 インライン ブール演算子 <(
const uuid+ Lhs,
const uuid+ rhs) {
return Lhs.m_uuid <rhs.m_uuid を返す}
54 インライン ブール演算子 <=(
const uuid+ Lhs,
const uuid_rhs) {
return Lhs.m_uuid <=rhs.m_uuid} }
57 explicit object_id (
const std::string &)。
60 [[nodiscard]] std::string to_string()
const 。
64 テンプレート<
typename mapped_type>
68 インライン ブール演算子 ==(
const object_id & Lhs、
const object_id &rhs) {
return Lhs.m_object_id ==rhs.m_object_id。 }
69 インライン ブール演算子 !=(
const object_id+ Lhs、
const object_id+ rhs) {
return Lhs.m_object_id != RHs.m_object_id : }
70 インライン ブール演算子 <(
const object_id+ Lhs,
const object_id+rhs) {
return Lhs.m_object_id < RHs.m_object_id。 }
71 インライン ブール演算子 >(
const object_id+ Lhs,
const object_id+rhs){
return Lhs.m_object_id > rhs.m_object_id。 }
72 インライン ブール演算子 <=(
const object_id+ Lhs,
const object_id+rhs) {
return Lhs.m_object_id <=rhs.m_object_id。 }
73 インライン ブール演算子 >=(
const object_id+ Lhs,
const object_id+rhs) {
return Lhs.m_object_id >=rhs.m_object_id。 }
76 explicit 10進数128 (
const std::string &)
77 小数点 128{ 2 ( double と )
79 [[nodiscard]] std::string to_string()
const 。
80[[ nodiscard ]]
ブール値 は NaN() が
含む 、
84 テンプレート<
typename mapped_type>
99 インライン ブール演算子 >=(
const 10 進数128 & Lhs、
const 10 進数128 &rhs) {
return Lhs.m_decimal >= rhs.m_decimal を返す}
100 インライン ブール演算子 <(
const 10 進数128 & Lhs、
const 10 進数128 & rhs) {
return Lhs.m_decimal <rhs.m_decimal }
101 インライン ブール演算子 <=(
const 10 進数128 & Lhs、
const 10 進数128 & rhs) {
return Lhs.m_decimal <= rhs.m_decimal }
102 インライン ブール演算子 ==(
const 10 進数128 & Lhs、
const 10 進数128 & rhs) {
return Lhs.m_decimal ==rhs.m_decimal }
103 インライン ブール演算子 !=(
const 10 進数128 & Lhs、
const 10 進数128 &rhs) {
return Lhs.m_decimal !=rhs.m_decimal を返す}
108 静的 inline int64 _t Serialize(int64 _t v、
const std::optional{internal::bridge::realm>+<internal::bridge::realm> = std::nullopt) {
111 静的 inline int 64 _tdeserialize(int 64 _t v) {
115 静的 インライン std::optional[int64 _t> Serialize(
const std::optional[int64 _t>+ v,
const <internal::bridge::realm>std::optional[Interl::bridge::realm>+ = std::nullopt] {
118 静的 inline 64 64
opデータベース
122 静的 インライン double Serialize(
const double と v、
const std::optional[Interl::bridge::realm>+<internal::bridge::realm> = std::nullopt)] {{
125 静的 インライン double delete(
const double & v) {
129 静的 インライン std::optional[double] と<double> v 、
const std::optional[<double>
<internal::bridge::realm>Interl ::bridge::realm>+ = std::nullopt] {{
132 静的 inline std::optional=double>deserialize(<double>
const std::optional=double>+<double> v) {
136 静的 インライン ブール シリアル化(
bool v,
const std::optional[Interval::bridge::realm>+<internal::bridge::realm> = std::nullopt)] {
139 静的 インライン ブール逆シリアル化(
bool v) {
143 静的 インライン std::optional[bool]><bool> Serialize(std::optional[bool]<bool> v,
const std::optional[Interval::bridge::realm]>+<internal::bridge::realm> = std::nullopt) {
146 静的 inline <bool>std::optional[bool]>deserialize(std::optional[bool]v)<bool> {
151 静的 インライン typename std::enable_if_t[std::is_enum_v[T]],<T> int64 _t> Serialize(
const T+ v,
const <internal::bridge::realm>std::optional=std::nullopt) {
152 return 静的_投じ[ int 64 _t
> (v) ]
154 テンプレート <
typename T, std::enable_if_t=std::is_enum_v=T============================================<T>
155 静的 inline T diserialize(int 64 _t v) {
156 return 静的_ Cast < T
> (v):
160 静的 インライン std::enable_if_t<std::is_enum_v[typename<typename T::value_type> T::value_type], std::optional[int64 _t]ID(
const T & v、
const std::optional<internal::bridge::realm> & =std::nullopt){{
162 return 静的_ Cast < int 64 _t
> (*v)。
167 テンプレート<
typename T, std::enable_if_t=std::is_enum_v=
typename T::value_type=====================================
168 静的 インラインstd::optional{int 64 _t> diserialize(std::optional 64 _t> v) {
170 return 静的_キャスト_T > (*v):
176 静的 インライン std::string 直列化(
const std::string+ v,
const std::optional[internal::bridge::realm]+<internal::bridge::realm> = std::nullopt) {
179 静的 inline std::string diserialize(
const std::string+ v) {
183 静的 インライン std::optional[std::string]reize(<std::string>
const std::optional[std::string]+<std::string> v,
const std::optional[Interl::bridge::realm>+<internal::bridge::realm> = std::nullopt] {{
186 静的 inline <std::string>std::optional{std::string>deserialize(
const std::optional{std::string>+<std::string> v) {
190 静的 インライン 内部::bridge::uuid Serialize(
const uuid+ v、
const <internal::bridge::realm>std::optional=Interl::bridge::realm>= std::nullopt) {
193 静的 インラインUUID シリアル化(
const internal::bridge::uuid & v) {
194 return v.オペレーター ::realm::uuid()
197 静的 インライン std::optional=<internal::bridge::uuid> Interl<uuid>
<internal::bridge::realm>::bridge::uuid> Serialize(
const std::optional=uuid>====================================================================
200 静的 inline <uuid>std::optional=uuid>deserialize(
const std::optional=integer::bridge::uuid=======================================<internal::bridge::uuid>
202 return v->演算子 ::realm::uuid()
208 静的 インライン 内部::bridge::binary (
const std::vector8
===================================================================================================<internal::bridge::realm>
211 静的 inline std::vector 8 _t>deserialize(
const internal::bridge::binary+ v) {
212 return 8 std::vector==========================================
215 静的 インライン std :: optional<internal::bridge::binary> ]
内部::bridge::binary[]8<internal::bridge::realm> >= std::nullopt){
218 静的 inline std:: optional std::vector======================================================================================================8
<internal::bridge::binary>
220 return v-> 演算子 std::vector 8 _t>()
226 静的 インライン 内部::bridge::timestamp Serialize(
const std::chrono::time_point=std::chrono:system_cloud>+<std::chrono::system_clock> v,
Const std::optional[<internal::bridge::realm> Interl ::bridge::realm>+ = std::nullopt] ){
229 静的 inline std::chrono::time_point=std::chronno:system_クロック>deserialize(<std::chrono::system_clock>
const internal::bridge::timestamp+ v) {
230 return v.operator std::chrono::time_point=std::chrono::system_クロック>()<std::chrono::system_clock>
233 静的 インライン std::optional[]<internal::bridge::timestamp> 内部::bridge::timestamp> Serialize(
const std::optional[std::chrono:: time_point [std::chronno::system_cloud]<std::chrono::system_clock> :
<internal::bridge::realm>の:bridge::realm>=std::nullopt) {
236 静的 inline std::optional=std::chrono:: time_point =std::chrono:system_lock==========================================================<std::chrono::system_clock>
<internal::bridge::timestamp>
238 return v->演算子 std::chrono::time_point=std::chrono::system_クロック>()<std::chrono::system_clock>
244 静的 インライン 内部::bridge::object_id Serialize(
const Realm::object_id & v、
const std::optional"::realm>+<internal::bridge::realm> = std::nullopt) {
248 return v.オペレーター ::realm::object_id()
251 静的 インライン std::optional[]<internal::bridge::object_id> 内部::bridge::object_id> Serialize(
const<realm::object_id> std::optional[realm::object_id>+ v,
const<internal::bridge::realm> std::optional[Interl::bridge::realm]+ = std::nullopt ){
254 静的 inline <realm::object_id>std::optional{realm::object_id>deserialize(
const <internal::bridge::object_id>std::optional{Interl::bridge::object_id>+v){{
256 return v->演算子 ::realm::object_id()
262 静的 インライン 内部::bridge::decimal128 serialize(
const Realm::decimal128 & v、
const <internal::bridge::realm>std::optional{Interl::bridge::realm>8=std::nullopt){{
266 return v.operator ::realm::decimal 128 ()
269 静的 inline std::optional[] 内部::bridge::decimal128 > Serialize(
const std::optional[realm::decimal128 >+ v,
const std::optional[intal::bridge::realm]<internal::bridge::realm> & =std::nullopt){{
272 静的 inline std::optional{realm::decimal 128 > Deserialize(
const std::optional{Interl::bridge::decimal 128 >+ v) {{
274 return v->演算子 ::realm::decimal 128 ()
281 静的 インライン typename std:: enable_if_t = Interl ::type_info::MixedPeristableConcern=======================================================================<T>
<internal::bridge::realm>std::nullopt) {
282 return std::visit([+](
auto &+ arg) {
283 保存済みタイプ = std::decimal_t< Decimaltype
(arg)>
を使用し ます。
284 M =
typename internal::
type_info ::type_info<StoredType>::の間で設定したデータ型。
285 return internal::bridge::混合(M(arg)):
290 静的 インライン typename std::enable_if_t<!権内部::type_info::MixedPersistableConcern"T"::value,<T> T>
291 deserialize(
const internal::bridge::ixed, 値) {
292 場合 constexpr (内部::type_info::is_optional<T>::value){{
294 }
else if constexpr (std::is_same_v<T, int64_t>) {
296 }
else if constexpr (std::is_same_v<T, bool>) {
298 }
else if constexpr (std::is_same_v<T, std::string>) {
299 return 静的_投じ[ std::string ]
> (値)。
300 }
else if constexpr (std::is_same_v<T, std::vector<uint8_t>>) {
301 return 静的_
Cast_
std ::8 ..
302 }
else if constexpr (std::is_same_v<T, std::chrono::time_point<std::chrono::system_clock>>) {
303 return 静的_投じ[ internal::bridge ::timestamp
> (値)]
304 }
以外の場合は Constexpr (std::disjortion_v=std::is_sume=T, double>, std::is_sume=T, double================================================================
305 return static_ Cast <double> (値)
306 }
else if constexpr (std::is_same_v<T, realm::uuid>) {
307 return value.operator internal::bridge::uuid().operator ::realm::uuid()
308 }
else if constexpr (std::is_same_v<T, realm::object_id>) {
309 return value.operator internal::bridge::object_id().operator ::realm::object_id()
310 }
else if constexpr (std::is_same_v<T, realm::decimal128>) {
311 return value.operator internal::bridge::decimal 128 () .operator ::realm::decimal 128 ()
312 }
else if constexpr (std::is_enum_v<T>) {
313 return 静的_キャスト_T > (value.operator int 64 _t()):
320 静的 インライン typename std::enable_if_t< internal::type_info::MixedPersistableConcern[T]::value,<T> T>
321 deserialize(
const internal::bridge::ixed, 値) {
322 (value.is_null())の
場合 {
323 return std::mongostat() を返します。
327 case internal::bridge::data_type::Int:
329 case internal::bridge::data_type::Bool:
331 case internal::bridge::data_type::String:
332 return 静的_投じ[ std::string ]
> (値)。
333 内部::bridge::
data_type ::Binary:
334 return 静的_
Cast_
std ::8 ..
335 case internal::bridge::data_type::Timestamp:
336 return 静的_投じ[ internal::bridge ::timestamp
> (値)]
337 case internal::bridge::data_type::Field:
338 case internal::bridge::data_type::Double:
339 return static_ Cast <double> (値)
340 case internal::bridge::data_type::UUID:
341 return value.operator internal::bridge::uuid().operator ::realm::uuid()
342 内部::bridge::
data_type ::ObjectId:
343 return value.operator internal::bridge::object_id().operator ::realm::object_id()
344 case internal::bridge::data_type::Decimal:
345 return value.operator internal::bridge::decimal 128 ().operator ::realm::decimal 128 ()
346 case internal::bridge::data_type::TypedLink:
347 スローstd::runtime_error(
"混合プロパティに保存されているオブジェクトは、`get_object_value()` 経由でアクセスする必要があります。)
349 slow std::runtime_error(
"混合プロパティを逆直列化する際、不明なデータ型が発生します。" )
定義: Managed_Dictionary.happ: 31