Proper shared_ptr
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user