Program Listing for File Resource.hpp
↰ Return to documentation for file (engine/include/Cacao/Resource.hpp)
#pragma once
#include "DllHelper.hpp"
#include <memory>
#include <string>
#include <vector>
namespace Cacao {
class BlobResource;
class Asset;
class CACAO_API Resource : public std::enable_shared_from_this<Resource> {
public:
const std::string GetAddress() const {
return address;
}
template<typename T>
requires std::is_base_of_v<Resource, T> && (!std::is_same_v<Asset, T>)
static bool ValidateResourceAddr(const std::string& addr);
virtual ~Resource();
protected:
Resource(const std::string& addr)
: address(addr) {}
std::string address;
};
class CACAO_API BlobResource : public Resource {
public:
static std::shared_ptr<BlobResource> Create(std::vector<unsigned char>&& data, const std::string& addr) {
return std::shared_ptr<BlobResource>(new BlobResource(std::move(data), addr));
}
static std::shared_ptr<BlobResource> Create(std::string&& data, const std::string& addr) {
return std::shared_ptr<BlobResource>(new BlobResource(std::move(data), addr));
}
const std::vector<unsigned char>& GetData() {
return data;
}
std::string_view GetDataAsString() {
return std::string_view(reinterpret_cast<const char*>(data.data()), data.size());
}
private:
BlobResource(std::vector<unsigned char>&& data, const std::string& addr);
BlobResource(std::string&& data, const std::string& addr);
const std::vector<unsigned char> data;
friend class ResourceManager;
};
}