88--- @class atArray <T >
99--- @field private m_address pointer
1010--- @field private m_data_ptr pointer
11- --- @field private m_size integer
11+ --- @field private m_size uint16_t
1212--- @field private m_count uint16_t
13- --- @field private m_data_type any
14- --- @field private m_data_size uint16_t
1513--- @field private m_data array<pointer>
14+ --- @field private m_data_type any
1615--- @field private m_last_update_time Time.TimePoint
17- --- @overload fun ( address : pointer , data_type : any , data_size ?: number ): atArray
16+ --- @overload fun ( address : pointer , data_type ?: ClassMeta ): atArray
1817atArray = {}
1918atArray .__index = atArray
2019atArray .__type = " atArray"
@@ -26,60 +25,52 @@ setmetatable(atArray, {
2625
2726--- @generic T
2827--- @param address pointer
29- --- @param data_type ? T
30- --- @param data_size ? integer
28+ --- @param data_type ? ClassMeta<T>
3129--- @return atArray<T>
32- function atArray .new (address , data_type , data_size )
33- local default = setmetatable (
30+ function atArray .new (address , data_type )
31+ local instance = setmetatable (
3432 {
35- m_address = 0x0 ,
36- m_data_ptr = 0x0 ,
37- m_size = 0 ,
38- m_count = 0 ,
39- m_data_size = 0 ,
40- m_data = {}
33+ m_address = NULLPTR ,
34+ m_data_ptr = NULLPTR ,
35+ m_size = 0x0 ,
36+ m_count = 0x0 ,
37+ m_data = {} ,
38+ m_data_type = nil
4139 },
4240 atArray
4341 )
4442
4543 if not (IsInstance (address , " pointer" ) and address :is_valid ()) then
46- return default
44+ return instance
4745 end
4846
4947 local array_size = address :add (0x8 ):get_word ()
5048 if (array_size == 0 ) then
51- return default
49+ return instance
5250 end
5351
54- data_type = data_type or GenericClass
55- data_size = data_size or SizeOf (data_type )
56- local instance = setmetatable (
57- {
58- m_address = address ,
59- m_data_ptr = address :deref (),
60- m_size = array_size ,
61- m_count = address :add (0xA ):get_word (),
62- m_data_type = data_type ,
63- m_data_size = data_size ,
64- m_data = {},
65- m_last_update_time = TimePoint :new ()
66- },
67- atArray
68- )
52+ instance .m_address = address
53+ instance .m_data_ptr = address :deref ()
54+ instance .m_size = array_size
55+ instance .m_count = address :add (0xA ):get_word ()
56+ instance .m_data_type = data_type
57+ instance .m_last_update_time = TimePoint :new ()
6958
7059 for i = 0 , array_size - 1 do
71- instance .m_data [i + 1 ] = instance .m_data_ptr :add (i * data_size ):deref ()
60+ instance .m_data [i + 1 ] = instance .m_data_ptr :add (i * 0x8 ):deref ()
7261 end
7362
7463 return instance
7564end
7665
7766--- @return boolean
7867function atArray :IsValid ()
79- return IsInstance (self .m_address , " pointer" )
80- and IsInstance (self .m_data_ptr , " pointer" )
81- and self .m_address :is_valid ()
82- and self .m_data_ptr :is_valid ()
68+ return self .m_address :is_valid () and self .m_data_ptr :is_valid ()
69+ end
70+
71+ --- @return boolean
72+ function atArray :IsNull ()
73+ return not self :IsValid ()
8374end
8475
8576--- @return boolean
@@ -88,6 +79,16 @@ function atArray:IsEmpty()
8879 return self .m_size == 0
8980end
9081
82+ function atArray :Clear ()
83+ self .m_address = NULLPTR
84+ self .m_data_ptr = NULLPTR
85+ self .m_data = {}
86+ self .m_size = 0x0
87+ self .m_count = 0x0
88+ self .m_data_type = nil
89+ self .m_last_update_time :reset ()
90+ end
91+
9192function atArray :Update ()
9293 if not self :IsValid () then
9394 return
@@ -106,7 +107,7 @@ function atArray:Update()
106107 end
107108
108109 for i = 0 , self .m_size - 1 do
109- self .m_data [i + 1 ] = self .m_data_ptr :add (i * self . m_data_size ):deref ()
110+ self .m_data [i + 1 ] = self .m_data_ptr :add (i * 0x8 ):deref ()
110111 end
111112
112113 self .m_last_update_time :reset ()
@@ -154,12 +155,12 @@ end
154155
155156--- @return uint16_t
156157function atArray :DataSize ()
157- return self .m_data_size
158+ return SizeOf ( self .m_data )
158159end
159160
160161--- @return string
161162function atArray :DataType ()
162- return (self .m_data_type and self .m_data_type .__type ) or " None "
163+ return (self .m_data_type and self .m_data_type .__type ) or " pointer<undefined> "
163164end
164165
165166--- @param i number
0 commit comments