summaryrefslogtreecommitdiff
path: root/view/sharedcache/api/sharedcache.cpp
diff options
context:
space:
mode:
authorMark Rowe <mrowe@bdash.net.nz>2025-02-08 10:40:44 -0800
committerMason Reed <mason@vector35.com>2025-02-12 18:43:02 -0500
commitc20bf355152d9a715dae3c19777c3d4a1046174b (patch)
treeca54b22241c36bcfd8259c16b2583b9d19487ed3 /view/sharedcache/api/sharedcache.cpp
parent714d7628097c5b02e23bcad1dba9880c7afc034b (diff)
[SharedCache] Make MetadataSerializable::Load static
`MetadataSerializable` is updated to allow a subclass to optionally specify the return type of `Load`. If not specified it defaults to the subclass itself. `SharedCache` specifies `std::optional` to represent the case where the serialized metadata is in a format or version it does not recognize. By making `Load` a static member function and having it return a new object it becomes easier to reason about the state of objects when a deserialization failure occurs. It can return `std::optional` to indicate failure and there is no object left in an unknown state. Prior to this, `Load` worked on an existing instance of an object. It was unclear what state the object would be in if a deserialization failure occurred (its original state prior to `Load`? some partially-loaded state? a null state?). The failure itself also had to be communicated out of band.
Diffstat (limited to 'view/sharedcache/api/sharedcache.cpp')
-rw-r--r--view/sharedcache/api/sharedcache.cpp9
1 files changed, 3 insertions, 6 deletions
diff --git a/view/sharedcache/api/sharedcache.cpp b/view/sharedcache/api/sharedcache.cpp
index e764531c..472bb024 100644
--- a/view/sharedcache/api/sharedcache.cpp
+++ b/view/sharedcache/api/sharedcache.cpp
@@ -204,9 +204,8 @@ namespace SharedCacheAPI {
BNFreeString(outputStr);
if (output.empty())
return {};
- SharedCacheMachOHeader header;
- header.LoadFromString(output);
- return header;
+
+ return SharedCacheMachOHeader::LoadFromString(output);
}
std::optional<SharedCacheMachOHeader> SharedCache::GetMachOHeaderForAddress(uint64_t address)
@@ -218,9 +217,7 @@ namespace SharedCacheAPI {
BNFreeString(outputStr);
if (output.empty())
return {};
- SharedCacheMachOHeader header;
- header.LoadFromString(output);
- return header;
+ return SharedCacheMachOHeader::LoadFromString(output);
}
BNDSCViewState SharedCache::GetState()