open_coroutine_core/
config.rs

1use crate::common::constants::{cpu_count, DEFAULT_STACK_SIZE};
2
3#[repr(C)]
4#[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
5pub struct Config {
6    event_loop_size: usize,
7    stack_size: usize,
8    min_size: usize,
9    max_size: usize,
10    keep_alive_time: u64,
11    min_memory_count: usize,
12    memory_keep_alive_time: u64,
13    hook: bool,
14}
15
16impl Config {
17    #[must_use]
18    pub fn single() -> Self {
19        Self::new(1, DEFAULT_STACK_SIZE, 0, 65536, 0, 0, 0, true)
20    }
21
22    #[allow(clippy::too_many_arguments)]
23    #[must_use]
24    pub fn new(
25        event_loop_size: usize,
26        stack_size: usize,
27        min_size: usize,
28        max_size: usize,
29        keep_alive_time: u64,
30        min_memory_count: usize,
31        memory_keep_alive_time: u64,
32        hook: bool,
33    ) -> Self {
34        Self {
35            event_loop_size,
36            stack_size,
37            min_size,
38            max_size,
39            keep_alive_time,
40            min_memory_count,
41            memory_keep_alive_time,
42            hook,
43        }
44    }
45
46    #[must_use]
47    pub fn event_loop_size(&self) -> usize {
48        self.event_loop_size
49    }
50
51    #[must_use]
52    pub fn stack_size(&self) -> usize {
53        self.stack_size
54    }
55
56    #[must_use]
57    pub fn min_size(&self) -> usize {
58        self.min_size
59    }
60
61    #[must_use]
62    pub fn max_size(&self) -> usize {
63        self.max_size
64    }
65
66    #[must_use]
67    pub fn keep_alive_time(&self) -> u64 {
68        self.keep_alive_time
69    }
70
71    #[must_use]
72    pub fn min_memory_count(&self) -> usize {
73        self.min_memory_count
74    }
75
76    #[must_use]
77    pub fn memory_keep_alive_time(&self) -> u64 {
78        self.memory_keep_alive_time
79    }
80
81    #[must_use]
82    pub fn hook(&self) -> bool {
83        self.hook
84    }
85
86    pub fn set_event_loop_size(&mut self, event_loop_size: usize) -> &mut Self {
87        assert!(
88            event_loop_size > 0,
89            "event_loop_size must be greater than 0"
90        );
91        self.event_loop_size = event_loop_size;
92        self
93    }
94
95    pub fn set_stack_size(&mut self, stack_size: usize) -> &mut Self {
96        assert!(stack_size > 0, "stack_size must be greater than 0");
97        self.stack_size = stack_size;
98        self
99    }
100
101    pub fn set_min_size(&mut self, min_size: usize) -> &mut Self {
102        self.min_size = min_size;
103        self
104    }
105
106    pub fn set_max_size(&mut self, max_size: usize) -> &mut Self {
107        assert!(max_size > 0, "max_size must be greater than 0");
108        assert!(
109            max_size >= self.min_size,
110            "max_size must be greater than or equal to min_size"
111        );
112        self.max_size = max_size;
113        self
114    }
115
116    pub fn set_keep_alive_time(&mut self, keep_alive_time: u64) -> &mut Self {
117        self.keep_alive_time = keep_alive_time;
118        self
119    }
120
121    pub fn set_min_memory_count(&mut self, min_memory_count: usize) -> &mut Self {
122        self.min_memory_count = min_memory_count;
123        self
124    }
125
126    pub fn set_memory_keep_alive_time(&mut self, memory_keep_alive_time: u64) -> &mut Self {
127        self.memory_keep_alive_time = memory_keep_alive_time;
128        self
129    }
130
131    pub fn set_hook(&mut self, hook: bool) -> &mut Self {
132        self.hook = hook;
133        self
134    }
135}
136
137impl Default for Config {
138    fn default() -> Self {
139        Self::new(cpu_count(), DEFAULT_STACK_SIZE, 0, 65536, 0, 0, 0, true)
140    }
141}