| #ifndef _RIVE_FILE_ASSET_HPP_ |
| #define _RIVE_FILE_ASSET_HPP_ |
| #include "rive/assets/file_asset_referencer.hpp" |
| #include "rive/generated/assets/file_asset_base.hpp" |
| #include "rive/span.hpp" |
| #include "rive/simple_array.hpp" |
| #include <string> |
| |
| namespace rive |
| { |
| class Factory; |
| class FileAsset : public FileAssetBase |
| { |
| private: |
| std::vector<uint8_t> m_cdnUuid; |
| std::vector<FileAssetReferencer*> m_fileAssetReferencers; |
| |
| public: |
| Span<const uint8_t> cdnUuid() const; |
| std::string cdnUuidStr() const; |
| |
| void decodeCdnUuid(Span<const uint8_t> value) override; |
| void copyCdnUuid(const FileAssetBase& object) override; |
| virtual bool decode(SimpleArray<uint8_t>&, Factory*) = 0; |
| virtual std::string fileExtension() const = 0; |
| StatusCode import(ImportStack& importStack) override; |
| const std::vector<FileAssetReferencer*> fileAssetReferencers() |
| { |
| return m_fileAssetReferencers; |
| } |
| |
| void addFileAssetReferencer(FileAssetReferencer* referencer) |
| { |
| m_fileAssetReferencers.push_back(referencer); |
| } |
| |
| void removeFileAssetReferencer(FileAssetReferencer* referencer) |
| { |
| auto itr = m_fileAssetReferencers.begin(); |
| while (itr != m_fileAssetReferencers.end()) |
| { |
| if (*itr == referencer) |
| { |
| itr = m_fileAssetReferencers.erase(itr); |
| } |
| else |
| { |
| itr++; |
| } |
| } |
| } |
| |
| std::string uniqueFilename() const; |
| }; |
| } // namespace rive |
| |
| #endif |