diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2019-04-21 20:09:56 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2019-04-21 20:13:18 +0200 |
| commit | 41eabf6ac74a7c0e81912742764ebea3d0e1fe07 (patch) | |
| tree | d68a7cba942e3eeecde633f2d2b2cc31ffca661c /src/cppc4group.cpp | |
| parent | 69c6e8b4d300f99a31dcb4491557ffa2452bc243 (diff) | |
| download | cc4group-41eabf6ac74a7c0e81912742764ebea3d0e1fe07.tar.gz cc4group-41eabf6ac74a7c0e81912742764ebea3d0e1fe07.zip | |
He made cc4group lazy and he saw that it was good
Diffstat (limited to 'src/cppc4group.cpp')
| -rw-r--r-- | src/cppc4group.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/cppc4group.cpp b/src/cppc4group.cpp index 04f7cef..71d9e0d 100644 --- a/src/cppc4group.cpp +++ b/src/cppc4group.cpp @@ -53,13 +53,21 @@ struct CppC4Group::MemoryManagement::Private { { auto customMemoryManagement = reinterpret_cast<CustomMemoryManagement*>(arg); customMemoryManagement->referenceUsage(); + if(data == nullptr && size == 0) + { + return nullptr; + } + return customMemoryManagement->start(data, size); } static void callEndAndCleanup(void* const data, void* const arg) { auto customMemoryManagement = reinterpret_cast<CustomMemoryManagement*>(arg); - customMemoryManagement->end(data); + if(data != nullptr) + { + customMemoryManagement->end(data); + } customMemoryManagement->dereferenceUsage(); } @@ -346,10 +354,10 @@ namespace { } }; -std::optional<CppC4Group::EntryInfo> CppC4Group::getEntryInfo(const std::string& path) +std::optional<CppC4Group::EntryInfo> CppC4Group::getEntryInfo(const std::string& path, bool lazy) { CC4Group_EntryInfo info; - if(cc4group.getEntryInfo(p->g, path.c_str(), &info)) + if(cc4group.getEntryInfo(p->g, path.c_str(), &info, lazy)) { auto entryInfo = std::make_optional<CppC4Group::EntryInfo>(); fillEntryInfo(*entryInfo, info); @@ -361,12 +369,12 @@ std::optional<CppC4Group::EntryInfo> CppC4Group::getEntryInfo(const std::string& } } -std::optional<std::vector<CppC4Group::EntryInfo>> CppC4Group::getEntryInfos(const std::string& path) +std::optional<std::vector<CppC4Group::EntryInfo>> CppC4Group::getEntryInfos(const std::string& path, bool lazy) { CC4Group_EntryInfo* infos; size_t infoCount; - if(cc4group.getEntryInfos(p->g, path.c_str(), &infos, &infoCount)) + if(cc4group.getEntryInfos(p->g, path.c_str(), &infos, &infoCount, lazy)) { auto entryInfos = std::make_optional<std::vector<CppC4Group::EntryInfo>>(infoCount); |
