#pragma once #ifndef CRYFS_LIB_IMPL_DIRBLOB_H_ #define CRYFS_LIB_IMPL_DIRBLOB_H_ #include #include #include "messmer/cpp-utils/macros.h" #include #include #include namespace cryfs{ class DirBlob { public: static std::unique_ptr InitializeEmptyDir(std::unique_ptr blob); DirBlob(std::unique_ptr blob); virtual ~DirBlob(); std::unique_ptr> GetChildren() const; //TODO Use struct instead of pair std::pair GetChild(const std::string &name) const; void AddChildDir(const std::string &name, const blockstore::Key &blobKey); void AddChildFile(const std::string &name, const blockstore::Key &blobKey); private: unsigned char magicNumber() const; void AddChild(const std::string &name, const blockstore::Key &blobKey, fspp::Dir::EntryType type); const char *readAndAddNextChild(const char *pos, std::vector *result) const; const char *getStartingPosOfEntry(const char *pos, const std::string &name) const; std::unique_ptr _blob; DISALLOW_COPY_AND_ASSIGN(DirBlob); }; } #endif