Skip to main content

luaur_common/methods/
thread_context_event_argument.rs

1use crate::enums::event_type::EventType;
2use crate::records::event::Event;
3use crate::records::event::EventData;
4use crate::records::thread_context::ThreadContext;
5
6impl ThreadContext {
7    pub fn event_argument(
8        &mut self,
9        name: *const core::ffi::c_char,
10        value: *const core::ffi::c_char,
11    ) {
12        let pos = self.data.len() as u32;
13        unsafe {
14            let mut p = name;
15            while !p.is_null() && *p != 0 {
16                self.data.push(*p);
17                p = p.add(1);
18            }
19            self.data.push(0);
20        }
21        self.events.push(Event {
22            r#type: EventType::ArgName,
23            token: 0,
24            data: EventData { microsec: pos },
25        });
26
27        let pos = self.data.len() as u32;
28        unsafe {
29            let mut p = value;
30            while !p.is_null() && *p != 0 {
31                self.data.push(*p);
32                p = p.add(1);
33            }
34            self.data.push(0);
35        }
36        self.events.push(Event {
37            r#type: EventType::ArgValue,
38            token: 0,
39            data: EventData { microsec: pos },
40        });
41
42        if self.events.len() > Self::kEventFlushLimit {
43            self.flush_events();
44        }
45    }
46}