Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: GDAL 4 : * Purpose: Icechunk driver 5 : * Author: Even Rouault <even dot rouault at spatialys.com> 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2026, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef ICECHUNKREPO_H 14 : #define ICECHUNKREPO_H 15 : 16 : #include <string> 17 : #include <memory> 18 : 19 : #include "icechunkfile.h" 20 : #include "cpl_vsi_virtual.h" 21 : 22 : namespace gdal::icechunk 23 : { 24 : class IcechunkSnapshot; 25 : class IcechunkManifest; 26 : 27 : /************************************************************************/ 28 : /* IcechunkRepo */ 29 : /************************************************************************/ 30 : 31 : /** Instance of https://icechunk.io/en/stable/reference/spec/#repo-info-file 32 : * 33 : * It is thread-safe. 34 : */ 35 6618 : class IcechunkRepo final : public IcechunkFile 36 : { 37 : public: 38 : IcechunkRepo(); 39 : ~IcechunkRepo() override; 40 : 41 : static std::unique_ptr<IcechunkRepo> Open(const char *pszFilename, 42 : VSIVirtualHandle *fp = nullptr); 43 : 44 : std::unique_ptr<IcechunkSnapshot> 45 : OpenSnapshotOnBranch(const std::string &id, 46 : bool emitErrorIfUnknownBranch = true) const; 47 : 48 : std::unique_ptr<IcechunkSnapshot> 49 : OpenSnapshotOnTag(const std::string &id, 50 : bool emitErrorIfUnknownTag = true) const; 51 : 52 : std::shared_ptr<IcechunkManifest> 53 : OpenManifest(const std::string &manifestId, uint64_t nExpectedFileSize, 54 : uint32_t nExpectedChunkRefs) const; 55 : 56 3 : const std::map<std::string, std::string> &GetTags() const 57 : { 58 3 : return m_oMapTagNameToSnapshotId; 59 : } 60 : 61 71 : const std::map<std::string, std::string> &GetBranches() const 62 : { 63 71 : return m_oMapBranchNameToSnapshotId; 64 : } 65 : 66 : static void ClearCaches(); 67 : 68 : private: 69 : std::string m_osRootPath{}; 70 : std::map<std::string, std::string> m_oMapTagNameToSnapshotId{}; 71 : std::map<std::string, std::string> m_oMapBranchNameToSnapshotId{}; 72 : 73 : static std::unique_ptr<IcechunkRepo> OpenV1(const char *pszRootPath); 74 : }; 75 : 76 : } // namespace gdal::icechunk 77 : 78 : #endif