MatureJsonObject.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. // Copyright 2024 Tracer Interactive, LLC. All Rights Reserved.
  2. #include "MatureJsonObject.h"
  3. //#include "MatureJsonConverter.h"
  4. #include "MatureJsonList.h"
  5. //#include "MatureJsonHelpers.h"
  6. #include "MatureJsonEnums.h"
  7. #include "Policies/CondensedJsonPrintPolicy.h"
  8. #include "Policies/PrettyJsonPrintPolicy.h"
  9. FMatureJsonObject::ObjectWrap::ObjectWrap()
  10. : Document(MakeShared<mature::Document>())
  11. , Object(Document->SetObject().GetObject())
  12. {
  13. }
  14. //FMatureJsonObject::ObjectWrap::ObjectWrap(TSharedPtr<mature::Document> Doc)
  15. // : Document(Doc)
  16. // , Object(Document->SetObject().GetObject())
  17. //{
  18. //}
  19. FMatureJsonObject::ObjectWrap::ObjectWrap(TSharedPtr<mature::Document> Doc,const mature::Object& Ref)
  20. : Document(Doc)
  21. , Object(Ref)
  22. {
  23. }
  24. FMatureJsonObject::ObjectWrap::ObjectWrap(TSharedPtr<mature::Document> Doc, const mature::Object&& Ref)
  25. : Document(Doc)
  26. , Object(Ref)
  27. {
  28. }
  29. mature::MemberIterator FMatureJsonObject::ObjectWrap::Begin() {
  30. return Object.MemberBegin();
  31. }
  32. mature::MemberIterator FMatureJsonObject::ObjectWrap::End() {
  33. return Object.MemberEnd();
  34. }
  35. FMatureJsonObject::FMatureJsonObject()
  36. : ObjectPtr(MakeShared<ObjectWrap>())
  37. {
  38. }
  39. FMatureJsonObject::FMatureJsonObject(TSharedPtr<mature::Document> Doc, const mature::Object& obj)
  40. : ObjectPtr(MakeShared<ObjectWrap>(Doc, obj))
  41. {
  42. }
  43. FMatureJsonObject::FMatureJsonObject(TSharedPtr<mature::Document> Doc, const mature::Object&& obj)
  44. : ObjectPtr(MakeShared<ObjectWrap>(Doc, obj))
  45. {
  46. }
  47. FMatureJsonObject::FMatureJsonObject(const FMatureJsonObject& rhs)
  48. : ObjectPtr(rhs.ObjectPtr)
  49. {
  50. }
  51. FMatureJsonObject::FMatureJsonObject(const FMatureJsonObject&& rhs)
  52. : ObjectPtr(rhs.ObjectPtr)
  53. {
  54. }
  55. FMatureJsonValue FMatureJsonObject::AddKey(const FString& key) {
  56. if (!Object().HasMember(*key)) {
  57. Object().AddMember(mature::Value(*key, GetAllocator()), mature::Value(), GetAllocator());
  58. }
  59. return FMatureJsonValue(Document(), Object()[*key]);
  60. }
  61. FMatureJsonValue FMatureJsonObject::GetKey(const FString& key) const {
  62. if (!Object().HasMember(*key)) {
  63. return FMatureJsonValue();
  64. }
  65. return FMatureJsonValue(Document(), Object()[*key]);
  66. }
  67. //FMatureJsonObject& FMatureJsonObject::SetValue(const FString& key,const FMatureJsonValue& Value) {
  68. // AddKey(key).SetValue(Value);
  69. // return *this;
  70. //}
  71. FMatureJsonObject& FMatureJsonObject::SetValue( const FLinearColor& Value )
  72. {
  73. Clear();
  74. AddKey(TEXT("r")).SetValue(Value.R);
  75. AddKey(TEXT("g")).SetValue(Value.G);
  76. AddKey(TEXT("b")).SetValue(Value.B);
  77. if (Value.A != 1.0f)
  78. AddKey(TEXT("a")).SetValue(Value.A);
  79. return *this;
  80. }
  81. FMatureJsonObject& FMatureJsonObject::SetValue( const FRotator& Value )
  82. {
  83. Clear();
  84. AddKey(TEXT("pitch")).SetValue(Value.Pitch);
  85. AddKey(TEXT("yaw")).SetValue(Value.Yaw);
  86. AddKey(TEXT("roll")).SetValue(Value.Roll);
  87. return *this;
  88. }
  89. FMatureJsonObject& FMatureJsonObject::SetValue( const FTransform& Value )
  90. {
  91. Clear();
  92. AddKey(TEXT("rotation")).SetValue(Value.Rotator());
  93. AddKey(TEXT("translation")).SetValue(Value.GetTranslation());
  94. const FVector Scale = Value.GetScale3D();
  95. if (Scale != FVector::OneVector)
  96. {
  97. if (Scale.IsUniform())
  98. AddKey(TEXT("scale")).SetValue(Scale.X);
  99. else
  100. AddKey(TEXT("scale")).SetValue(Scale);
  101. }
  102. return *this;
  103. }
  104. FMatureJsonObject& FMatureJsonObject::SetValue( const FVector& Value )
  105. {
  106. Clear();
  107. AddKey(TEXT("x")).SetValue(Value.X);
  108. AddKey(TEXT("y")).SetValue(Value.Y);
  109. AddKey(TEXT("z")).SetValue(Value.Z);
  110. return *this;
  111. }
  112. FMatureJsonObject& FMatureJsonObject::SetValue(const FMatureJsonObject& Value)
  113. {
  114. Clear();
  115. auto it = Value.Object().MemberBegin();
  116. for (; it != Value.Object().MemberEnd(); it++) {
  117. AddKey(FString( it->name.GetString())).SetValue(FMatureJsonValue(Document(), it->value));
  118. }
  119. return *this;
  120. }
  121. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FMatureJsonValue>& Value )
  122. {
  123. Clear();
  124. for ( const auto& Temp : Value )
  125. AddKey(Temp.Key).SetValue(Temp.Value);
  126. return *this;
  127. }
  128. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, bool>& Value )
  129. {
  130. Clear();
  131. for (const auto& Temp : Value)
  132. AddKey(Temp.Key).SetValue(Temp.Value);
  133. return *this;
  134. }
  135. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, float>& Value )
  136. {
  137. Clear();
  138. for (const auto& Temp : Value)
  139. AddKey(Temp.Key).SetValue(Temp.Value);
  140. return *this;
  141. }
  142. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, double>& Value )
  143. {
  144. Clear();
  145. for (const auto& Temp : Value)
  146. AddKey(Temp.Key).SetValue(Temp.Value);
  147. return *this;
  148. }
  149. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, int32>& Value )
  150. {
  151. Clear();
  152. for (const auto& Temp : Value)
  153. AddKey(Temp.Key).SetValue(Temp.Value);
  154. return *this;
  155. }
  156. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FString>& Value )
  157. {
  158. Clear();
  159. for (const auto& Temp : Value)
  160. AddKey(Temp.Key).SetValue(Temp.Value);
  161. return *this;
  162. }
  163. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FDateTime>& Value )
  164. {
  165. Clear();
  166. for (const auto& Temp : Value)
  167. AddKey(Temp.Key).SetValue(Temp.Value);
  168. return *this;
  169. }
  170. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FGuid>& Value )
  171. {
  172. Clear();
  173. for (const auto& Temp : Value)
  174. AddKey(Temp.Key).SetValue(Temp.Value);
  175. return *this;
  176. }
  177. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FColor>& Value )
  178. {
  179. Clear();
  180. for (const auto& Temp : Value)
  181. AddKey(Temp.Key).SetValue(Temp.Value);
  182. return *this;
  183. }
  184. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FLinearColor>& Value )
  185. {
  186. Clear();
  187. for (const auto& Temp : Value)
  188. AddKey(Temp.Key).SetValue(Temp.Value);
  189. return *this;
  190. }
  191. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FRotator>& Value )
  192. {
  193. Clear();
  194. for (const auto& Temp : Value)
  195. AddKey(Temp.Key).SetValue(Temp.Value);
  196. return *this;
  197. }
  198. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FTransform>& Value )
  199. {
  200. Clear();
  201. for (const auto& Temp : Value)
  202. AddKey(Temp.Key).SetValue(Temp.Value);
  203. return *this;
  204. }
  205. FMatureJsonObject& FMatureJsonObject::SetValue( const TMap<FString, FVector>& Value )
  206. {
  207. Clear();
  208. for (const auto& Temp : Value)
  209. AddKey(Temp.Key).SetValue(Temp.Value);
  210. return *this;
  211. }
  212. int32 FMatureJsonObject::Size() const
  213. {
  214. return Object().MemberCount();
  215. }
  216. bool FMatureJsonObject::IsEmpty()const {
  217. return Object().ObjectEmpty();
  218. }
  219. void FMatureJsonObject::Clear()
  220. {
  221. Object().RemoveAllMembers();
  222. }
  223. bool FMatureJsonObject::HasKey( const FString& Key ) const
  224. {
  225. return Object().HasMember(*Key);
  226. }
  227. void FMatureJsonObject::RemoveKey( const FString& Key )
  228. {
  229. if (Object().HasMember(*Key)) {
  230. Object().RemoveMember(*Key);
  231. }
  232. }
  233. FMatureJsonObject& FMatureJsonObject::AddValue(const FMatureJsonObject& rhs)
  234. {
  235. auto it = rhs.Object().MemberBegin();
  236. for (; it != rhs.Object().MemberEnd(); it++) {
  237. AddKey(FString(it->name.GetString())).SetValue(FMatureJsonValue(Document(), it->value));
  238. }
  239. return *this;
  240. }
  241. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, bool>& Map)
  242. {
  243. for (const auto& Temp : Map)
  244. AddKey(Temp.Key).SetValue(Temp.Value);
  245. return *this;
  246. }
  247. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, float>& Map)
  248. {
  249. for (const auto& Temp : Map)
  250. AddKey(Temp.Key).SetValue(Temp.Value);
  251. return *this;
  252. }
  253. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, int32>& Map)
  254. {
  255. for (const auto& Temp : Map)
  256. AddKey(Temp.Key).SetValue(Temp.Value);
  257. return *this;
  258. }
  259. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, double>& Map)
  260. {
  261. for (const auto& Temp : Map)
  262. AddKey(Temp.Key).SetValue(Temp.Value);
  263. return *this;
  264. }
  265. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FString>& Map)
  266. {
  267. for (const auto& Temp : Map)
  268. AddKey(Temp.Key).SetValue(Temp.Value);
  269. return *this;
  270. }
  271. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FDateTime>& Map)
  272. {
  273. for (const auto& Temp : Map)
  274. AddKey(Temp.Key).SetValue(Temp.Value);
  275. return *this;
  276. }
  277. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FGuid>& Map)
  278. {
  279. for (const auto& Temp : Map)
  280. AddKey(Temp.Key).SetValue(Temp.Value);
  281. return *this;
  282. }
  283. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FColor>& Map)
  284. {
  285. for (const auto& Temp : Map)
  286. AddKey(Temp.Key).SetValue(Temp.Value);
  287. return *this;
  288. }
  289. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FLinearColor>& Map)
  290. {
  291. for (const auto& Temp : Map)
  292. AddKey(Temp.Key).SetValue(Temp.Value);
  293. return *this;
  294. }
  295. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FRotator>& Map)
  296. {
  297. for (const auto& Temp : Map)
  298. AddKey(Temp.Key).SetValue(Temp.Value);
  299. return *this;
  300. }
  301. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FTransform>& Map)
  302. {
  303. for (const auto& Temp : Map)
  304. AddKey(Temp.Key).SetValue(Temp.Value);
  305. return *this;
  306. }
  307. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FVector>& Map)
  308. {
  309. for (const auto& Temp : Map)
  310. AddKey(Temp.Key).SetValue(Temp.Value);
  311. return *this;
  312. }
  313. FMatureJsonObject& FMatureJsonObject::AddValue(const TMap<FString, FMatureJsonValue>& Map) {
  314. for (const auto& Temp : Map)
  315. AddKey(Temp.Key).SetValue(Temp.Value);
  316. return *this;
  317. }
  318. FMatureJsonList FMatureJsonObject::AddList(const FString& Key) {
  319. return AddKey(Key).ToList();
  320. }
  321. FMatureJsonObject FMatureJsonObject::AddObject(const FString& Key) {
  322. return AddKey(Key).ToObject();
  323. }
  324. FMatureJsonValue FMatureJsonObject::AddValue(const FString& Key) {
  325. return AddKey(Key);
  326. }
  327. TArray<FString> FMatureJsonObject::GetKeys() const
  328. {
  329. TArray<FString> Keys;
  330. auto it = Object().MemberBegin();
  331. for (; it != Object().MemberEnd(); it++) {
  332. Keys.Add(it->name.GetString());
  333. }
  334. return Keys;
  335. }
  336. void FMatureJsonObject::GetValue(FLinearColor& Value) {
  337. GetKey(TEXT("r")).GetValue(Value.R);
  338. GetKey(TEXT("g")).GetValue(Value.G);
  339. GetKey(TEXT("b")).GetValue(Value.B);
  340. GetKey(TEXT("a")).GetValue(Value.A);
  341. }
  342. void FMatureJsonObject::GetValue(FRotator& Value) {
  343. GetKey(TEXT("pitch")).GetValue(Value.Pitch);
  344. GetKey(TEXT("yaw")).GetValue(Value.Yaw);
  345. GetKey(TEXT("roll")).GetValue(Value.Roll);
  346. }
  347. void FMatureJsonObject::GetValue(FTransform& Value) {
  348. FRotator rotation;
  349. FVector translation;
  350. FVector scale;
  351. GetKey(TEXT("rotation")).GetValue(rotation);
  352. GetKey(TEXT("translation")).GetValue(translation);
  353. if (!GetKey(TEXT("scale")).GetValue(scale)) {
  354. double scalex=0.0;
  355. GetKey(TEXT("scale")).GetValue(scalex);
  356. scale = FVector(scalex);
  357. }
  358. Value = FTransform(rotation, translation, scale);
  359. }
  360. void FMatureJsonObject::GetValue(FVector& Value) {
  361. GetKey(TEXT("x")).GetValue(Value.X);
  362. GetKey(TEXT("z")).GetValue(Value.Y);
  363. GetKey(TEXT("y")).GetValue(Value.Z);
  364. }
  365. bool FMatureJsonObject::GetValue(const FString& Key, bool& value) const {
  366. if (!Object().HasMember(*Key))return false;
  367. return GetKey(Key).GetValue(value);
  368. }
  369. bool FMatureJsonObject::GetValue(const FString& Key, float& value) const {
  370. if (!Object().HasMember(*Key))return false;
  371. return GetKey(Key).GetValue(value);
  372. }
  373. bool FMatureJsonObject::GetValue(const FString& Key, uint32& value) const {
  374. if (!Object().HasMember(*Key))return false;
  375. return GetKey(Key).GetValue(value);
  376. }
  377. bool FMatureJsonObject::GetValue(const FString& Key, int32& value) const {
  378. if (!Object().HasMember(*Key))return false;
  379. return GetKey(Key).GetValue(value);
  380. }
  381. bool FMatureJsonObject::GetValue(const FString& Key, uint64& value) const {
  382. if (!Object().HasMember(*Key))return false;
  383. return GetKey(Key).GetValue(value);
  384. }
  385. bool FMatureJsonObject::GetValue(const FString& Key, int64& value) const {
  386. if (!Object().HasMember(*Key))return false;
  387. return GetKey(Key).GetValue(value);
  388. }
  389. bool FMatureJsonObject::GetValue(const FString& Key, double& value) const {
  390. if (!Object().HasMember(*Key))return false;
  391. return GetKey(Key).GetValue(value);
  392. }
  393. bool FMatureJsonObject::GetValue(const FString& Key, FString& value) const {
  394. if (!Object().HasMember(*Key))return false;
  395. return GetKey(Key).GetValue(value);
  396. }
  397. bool FMatureJsonObject::GetValue(const FString& Key, FGuid& value) const {
  398. if (!Object().HasMember(*Key))return false;
  399. return GetKey(Key).GetValue(value);
  400. }
  401. bool FMatureJsonObject::GetValue(const FString& Key, FColor& value) const {
  402. if (!Object().HasMember(*Key))return false;
  403. return GetKey(Key).GetValue(value);
  404. }
  405. bool FMatureJsonObject::GetValue(const FString& Key, FDateTime& value) const {
  406. if (!Object().HasMember(*Key))return false;
  407. return GetKey(Key).GetValue(value);
  408. }
  409. bool FMatureJsonObject::GetValue(const FString& Key, FLinearColor& Value) const
  410. {
  411. if (!Object().HasMember(*Key))return false;
  412. return GetKey(Key).GetValue(Value);
  413. }
  414. bool FMatureJsonObject::GetValue(const FString& Key, FRotator& Value) const
  415. {
  416. if (!Object().HasMember(*Key))return false;
  417. return GetKey(Key).GetValue(Value);
  418. }
  419. bool FMatureJsonObject::GetValue(const FString& Key, FTransform& Value) const
  420. {
  421. if (!Object().HasMember(*Key))return false;
  422. return GetKey(Key).GetValue(Value);
  423. }
  424. bool FMatureJsonObject::GetValue(const FString& Key, FVector& Value) const
  425. {
  426. if (!Object().HasMember(*Key))return false;
  427. return GetKey(Key).GetValue(Value);
  428. }
  429. bool FMatureJsonObject::GetValue(const FString& Key, FMatureJsonValue& Value) const
  430. {
  431. if (!Object().HasMember(*Key))return false;
  432. Value = GetKey(Key);
  433. return true;
  434. }
  435. bool FMatureJsonObject::GetValue(const FString& Key, FMatureJsonObject& Value) const
  436. {
  437. if (!Object().HasMember(*Key))return false;
  438. Value = GetKey(Key).ToObject(true);
  439. return true;
  440. }
  441. bool FMatureJsonObject::GetValue(const FString& Key, FMatureJsonList& Value) const
  442. {
  443. if (!Object().HasMember(*Key))return false;
  444. Value = GetKey(Key).ToList(true);
  445. return true;
  446. }
  447. FMatureJsonValue FMatureJsonObject::ToValue(const FString& Key) const {
  448. FMatureJsonValue value;
  449. GetValue(Key, value);
  450. return value;
  451. }
  452. FMatureJsonObject FMatureJsonObject::ToObject(const FString& Key) const {
  453. FMatureJsonObject value;
  454. GetValue(Key, value);
  455. return value;
  456. }
  457. FMatureJsonList FMatureJsonObject::ToList(const FString& Key) const {
  458. FMatureJsonList value;
  459. GetValue(Key, value);
  460. return value;
  461. }
  462. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, bool Value)
  463. {
  464. AddKey(*Key).SetValue(Value);
  465. return *this;
  466. }
  467. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, float Value)
  468. {
  469. AddKey(*Key).SetValue(Value);
  470. return *this;
  471. }
  472. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, int32 Value)
  473. {
  474. AddKey(*Key).SetValue(Value);
  475. return *this;
  476. }
  477. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, double Value)
  478. {
  479. AddKey(*Key).SetValue(Value);
  480. return *this;
  481. }
  482. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const TCHAR* Value)
  483. {
  484. AddKey(*Key).SetValue(Value);
  485. return *this;
  486. }
  487. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FString& Value)
  488. {
  489. AddKey(*Key).SetValue(Value);
  490. return *this;
  491. }
  492. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FDateTime& Value)
  493. {
  494. AddKey(*Key).SetValue(Value);
  495. return *this;
  496. }
  497. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FGuid& Value)
  498. {
  499. AddKey(*Key).SetValue(Value);
  500. return *this;
  501. }
  502. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FColor& Value)
  503. {
  504. AddKey(*Key).SetValue(Value);
  505. return *this;
  506. }
  507. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FLinearColor& Value)
  508. {
  509. AddKey(*Key).SetValue(Value);
  510. return *this;
  511. }
  512. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FRotator& Value)
  513. {
  514. AddKey(*Key).SetValue(Value);
  515. return *this;
  516. }
  517. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FTransform& Value)
  518. {
  519. AddKey(*Key).SetValue(Value);
  520. return *this;
  521. }
  522. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FVector& Value)
  523. {
  524. AddKey(*Key).SetValue(Value);
  525. return *this;
  526. }
  527. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FMatureJsonValue& Value)
  528. {
  529. AddKey(*Key).SetValue(Value);
  530. return *this;
  531. }
  532. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FMatureJsonObject& Value)
  533. {
  534. AddKey(*Key).SetValue(Value);
  535. return *this;
  536. }
  537. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const FMatureJsonList& Value)
  538. {
  539. AddKey(*Key).SetValue(Value);
  540. return *this;
  541. }
  542. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const TArray<FMatureJsonValue>& Value)
  543. {
  544. AddKey(*Key).ToList().AddValue(Value);
  545. return *this;
  546. }
  547. FMatureJsonObject& FMatureJsonObject::AddValue(const FString& Key, const TMap<FString, FMatureJsonValue>& Value)
  548. {
  549. AddKey(*Key).ToObject().AddValue(Value);
  550. return *this;
  551. }
  552. FMatureJsonObject& FMatureJsonObject::operator=(const FMatureJsonObject& rhs) {
  553. ObjectPtr = rhs.ObjectPtr;
  554. return *this;
  555. }
  556. TSharedPtr<mature::Document> FMatureJsonObject::Document() {
  557. return ObjectPtr->Document;
  558. }
  559. TSharedPtr<mature::Document> FMatureJsonObject::Document()const {
  560. return ObjectPtr->Document;
  561. }
  562. inline mature::Object& FMatureJsonObject::Object(){
  563. return ObjectPtr->Object;
  564. }
  565. inline mature::Object& FMatureJsonObject::Object() const {
  566. return ObjectPtr->Object;
  567. }
  568. inline mature::Allocator& FMatureJsonObject::GetAllocator() {
  569. return ObjectPtr->Document->GetAllocator();
  570. }
  571. inline mature::Allocator& FMatureJsonObject::GetAllocator()const {
  572. return ObjectPtr->Document->GetAllocator();
  573. }
  574. FMatureJsonObjectIterator::FMatureJsonObjectIterator()
  575. : ObjectPtr(nullptr), Iterator()
  576. {
  577. }
  578. FMatureJsonObjectIterator::FMatureJsonObjectIterator(const FMatureJsonObject& Value)
  579. : ObjectPtr(Value.ObjectPtr), Iterator(ObjectPtr->Begin())
  580. {
  581. }
  582. FMatureJsonObjectIterator& FMatureJsonObjectIterator::Begin() {
  583. if (nullptr != ObjectPtr)
  584. Iterator = ObjectPtr->Begin();
  585. return *this;
  586. }
  587. FMatureJsonObjectIterator& FMatureJsonObjectIterator::End() {
  588. if (nullptr != ObjectPtr)
  589. Iterator = ObjectPtr->End();
  590. return *this;
  591. }
  592. bool FMatureJsonObjectIterator::IsValid()const {
  593. if (nullptr == ObjectPtr)return false;
  594. if (Iterator == ObjectPtr->End())return false;
  595. return ObjectPtr->Begin() <= Iterator;
  596. }
  597. void FMatureJsonObjectIterator::Next(int step) {
  598. Iterator = Iterator + step;
  599. }
  600. FString FMatureJsonObjectIterator::Key() {
  601. return Iterator->name.GetString();
  602. }
  603. FMatureJsonValue FMatureJsonObjectIterator::Value() {
  604. return FMatureJsonValue(ObjectPtr->Document, Iterator->value);
  605. }
  606. FString FMatureJsonObjectIterator::Key() const {
  607. return Iterator->name.GetString();
  608. }
  609. FMatureJsonValue FMatureJsonObjectIterator::Value() const {
  610. return FMatureJsonValue(ObjectPtr->Document, Iterator->value);
  611. }
  612. FMatureJsonObjectIterator& FMatureJsonObjectIterator::operator++() {
  613. Iterator++;
  614. return *this;
  615. }
  616. FMatureJsonObjectIterator& FMatureJsonObjectIterator::operator--() {
  617. Iterator--;
  618. return *this;
  619. }
  620. FMatureJsonObjectIterator& FMatureJsonObjectIterator::operator++(int) {
  621. ++Iterator;
  622. return *this;
  623. }
  624. FMatureJsonObjectIterator& FMatureJsonObjectIterator::operator--(int) {
  625. --Iterator;
  626. return *this;
  627. }
  628. FMatureJsonObjectIterator& FMatureJsonObjectIterator::operator=(const FMatureJsonObject& Value) {
  629. ObjectPtr = Value.ObjectPtr;
  630. Iterator = ObjectPtr->Begin();
  631. return *this;
  632. }
  633. FMatureJsonObjectIterator& FMatureJsonObjectIterator::operator=(const FMatureJsonObjectIterator& Value) {
  634. ObjectPtr = Value.ObjectPtr;
  635. Iterator = Value.Iterator;
  636. return *this;
  637. }