SDOM - Simple SDL Document Object Model
A lightweight, extensible Document Object Model for SDL-based applications.
Loading...
Searching...
No Matches
SDOM_AssetHandle.hpp
Go to the documentation of this file.
1// SDOM_AssetHandle.hpp
2#pragma once
4
5namespace SDOM
6{
7 class Core;
8 class Factory;
9 class IAssetObject;
10
11 // Lightweight handle for IAssetObject (idempotent Lua bindings, no heavy APIs).
12 class AssetHandle : public IDataObject
13 {
14 using SUPER = IDataObject;
15
16 public:
17 static constexpr const char* LuaHandleName = "AssetHandle";
18
20 AssetHandle(const std::string& name, const std::string& type, const std::string& filename)
21 : name_(name), type_(type), filename_(filename) {}
23 : name_(other.name_), type_(other.type_), filename_(other.filename_) {}
24
25
26 virtual ~AssetHandle();
27
28 // virtual methods from IDataObject
29 virtual bool onInit() override { return true; }
30 virtual void onQuit() override { }
31 virtual bool onUnitTest() override { return true; }
32
33 void reset() {name_.clear(); }
34
35 // Return the concrete IAssetObject (or nullptr)
36 IAssetObject* get() const;
37 template<typename T>
38 T* as() const { return dynamic_cast<T*>(get()); }
39
40 IAssetObject& operator*() const { return *get(); }
41 IAssetObject* operator->() const { return get(); }
42 operator bool() const { return get() != nullptr; }
43
44 bool operator==(std::nullptr_t) const { return get() == nullptr; }
45 bool operator!=(std::nullptr_t) const { return get() != nullptr; }
46 bool operator==(const AssetHandle& other) const { return name_ == other.name_ && type_ == other.type_ && filename_ == other.filename_; }
47 bool operator!=(const AssetHandle& other) const { return !(*this == other); }
48
49 AssetHandle& operator=(const AssetHandle& other) = default;
52
53 bool isValid() const { return get() != nullptr; }
54
55 const std::string& getName() const { return name_; }
56 const std::string& getType() const { return type_; }
57 const std::string& getFilename() const { return filename_; }
58
59 // Lua-friendly accessors
60 std::string getName_lua() const { return getName(); }
61 std::string getType_lua() const { return getType(); }
62 std::string getFilename_lua() const { return getFilename(); }
63
64 // Ensure the shared Lua handle table exists for AssetHandle
65 static sol::table ensure_handle_table(sol::state_view lua);
66
67 // Bind the minimal handle surface (idempotent)
68 static void bind_minimal(sol::state_view lua);
69
70 // Resolve a Lua spec/object into an AssetHandle
71 static AssetHandle resolveSpec(const sol::object& spec);
72
73 public:
74 inline static Factory* factory_ = nullptr;
75 protected:
76 friend Core;
77 friend Factory;
78
79 // Underlying factory and identity (lightweight; public for convenience)
80 std::string name_;
81 std::string type_;
82 std::string filename_;
83
84 // Called by concrete IAssetObject implementations to register type-specific exposure
85 virtual void _registerLuaBindings(const std::string& typeName, sol::state_view lua) override;
86
87 };
88
89} // namespace SDOM
Definition SDOM_AssetHandle.hpp:13
IAssetObject & operator*() const
Definition SDOM_AssetHandle.hpp:40
IAssetObject * get() const
Definition SDOM_AssetHandle.cpp:18
static Factory * factory_
Definition SDOM_AssetHandle.hpp:74
friend Factory
Definition SDOM_AssetHandle.hpp:77
AssetHandle()
Definition SDOM_AssetHandle.hpp:19
bool operator!=(const AssetHandle &other) const
Definition SDOM_AssetHandle.hpp:47
T * as() const
Definition SDOM_AssetHandle.hpp:38
friend Core
Definition SDOM_AssetHandle.hpp:76
virtual void _registerLuaBindings(const std::string &typeName, sol::state_view lua) override
Definition SDOM_AssetHandle.cpp:113
const std::string & getFilename() const
Definition SDOM_AssetHandle.hpp:57
const std::string & getType() const
Definition SDOM_AssetHandle.hpp:56
AssetHandle(const AssetHandle &other)
Definition SDOM_AssetHandle.hpp:22
static AssetHandle resolveSpec(const sol::object &spec)
Definition SDOM_AssetHandle.cpp:28
const std::string & getName() const
Definition SDOM_AssetHandle.hpp:55
virtual ~AssetHandle()
Definition SDOM_AssetHandle.cpp:13
IAssetObject * operator->() const
Definition SDOM_AssetHandle.hpp:41
std::string filename_
Definition SDOM_AssetHandle.hpp:82
std::string getFilename_lua() const
Definition SDOM_AssetHandle.hpp:62
std::string getType_lua() const
Definition SDOM_AssetHandle.hpp:61
static constexpr const char * LuaHandleName
Definition SDOM_AssetHandle.hpp:17
std::string name_
Definition SDOM_AssetHandle.hpp:80
std::string type_
Definition SDOM_AssetHandle.hpp:81
AssetHandle(AssetHandle &&)=default
bool operator==(std::nullptr_t) const
Definition SDOM_AssetHandle.hpp:44
bool operator!=(std::nullptr_t) const
Definition SDOM_AssetHandle.hpp:45
static sol::table ensure_handle_table(sol::state_view lua)
Definition SDOM_AssetHandle.cpp:77
static void bind_minimal(sol::state_view lua)
Definition SDOM_AssetHandle.cpp:95
bool isValid() const
Definition SDOM_AssetHandle.hpp:53
virtual void onQuit() override
Definition SDOM_AssetHandle.hpp:30
std::string getName_lua() const
Definition SDOM_AssetHandle.hpp:60
AssetHandle & operator=(const AssetHandle &other)=default
AssetHandle(const std::string &name, const std::string &type, const std::string &filename)
Definition SDOM_AssetHandle.hpp:20
AssetHandle & operator=(AssetHandle &&)=default
bool operator==(const AssetHandle &other) const
Definition SDOM_AssetHandle.hpp:46
virtual bool onUnitTest() override
Runs unit tests for this object.
Definition SDOM_AssetHandle.hpp:31
virtual bool onInit() override
Definition SDOM_AssetHandle.hpp:29
void reset()
Definition SDOM_AssetHandle.hpp:33
Definition SDOM_Factory.hpp:43
Definition SDOM_IAssetObject.hpp:10
Definition SDOM_IDataObject.hpp:107
Contains all core classes and utilities for the SDOM library.
Definition lua_BindHelpers.hpp:7