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 CACAO_API Resource : std::enable_shared_from_this<Resource> {
public:
const std::string GetAddress() const {
return address;
}
virtual ~Resource();
protected:
Resource(const std::string& addr)
: address(addr) {
RegisterSelf();
}
std::string address;
void RegisterSelf();
};
class CACAO_API BlobResource : public Resource {
protected:
BlobResource(const std::string& addr)
: Resource(addr) {}
};
class CACAO_API BinaryBlobResource : public BlobResource {
public:
static std::shared_ptr<BinaryBlobResource> Create(std::vector<unsigned char>&& data, const std::string& addr) {
return std::shared_ptr<BinaryBlobResource>(new BinaryBlobResource(std::move(data), addr));
}
const std::vector<unsigned char>& GetData() {
return data;
}
private:
BinaryBlobResource(std::vector<unsigned char>&& data, const std::string& addr)
: BlobResource(addr), data(data) {}
const std::vector<unsigned char> data;
friend class ResourceManager;
};
class CACAO_API TextBlobResource : public BlobResource {
public:
static std::shared_ptr<TextBlobResource> Create(std::string&& data, const std::string& addr) {
return std::shared_ptr<TextBlobResource>(new TextBlobResource(std::move(data), addr));
}
const std::string& GetData() {
return data;
}
private:
TextBlobResource(std::string&& data, const std::string& addr)
: BlobResource(addr), data(data) {}
const std::string data;
friend class ResourceManager;
};
}