Proper shared_ptr

This commit is contained in:
korenkonder
2024-02-23 11:34:11 +03:00
parent 47ebc41300
commit f627d5084d
3 changed files with 38 additions and 7 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ struct ObjsetInfo {
bool obj_loaded;
p_file_handler tex_file_handler;
bool tex_loaded;
shared_ptr_prj__stack_allocator alloc_handler;
prj::shared_ptr<void*> alloc_handler; // prj::stack_allocator
obj_set* obj_set;
prj::vector<std::pair<uint32_t, int32_t>> obj_id_data;
bool field_50;
+1 -1
View File
@@ -76,7 +76,7 @@ struct SprSet {
int32_t load_count;
void* file_handler;
bool ready;
shared_ptr_prj__stack_allocator alloc_handler;
prj::shared_ptr<void*> alloc_handler; // prj::stack_allocator
prj::string file;
};
+36 -5
View File
@@ -75,9 +75,40 @@ namespace prj {
template<typename T, typename U>
using map = std::map<T, U, std::less<T>, Allocator<pair<T, U>>>;
}
struct shared_ptr_prj__stack_allocator {
void* ptr;
void* ref;
};
template<typename T>
class ref_count {
private:
int32_t uses;
int32_t weaks;
T* ptr;
void(*delete_this_func)(ref_count* ref);
void(*destroy_func)(ref_count* ref, T* ptr);
};
template<class T>
class shared_ptr;
template<class T>
class ptr_base {
private:
T* ptr;
ref_count<T>* ref;
template<class U>
friend class ptr_base;
};
template<class T>
class shared_ptr : public ptr_base<T> {
public:
};
template<typename T, typename U>
struct sorted_vector {
vector<pair<T, U>> field_0;
size_t field_18;
vector<pair<T, U>> field_20;
bool field_38;
};
}