1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::allocators::global::current_allocator_in_use::CurrentAllocatorInUse;
use crate::allocators::global::local_allocator::LocalAllocator;

#[doc(hidden)]
#[allow(dead_code)]
pub struct PerThreadState<
    CoroutineLocalAllocator: LocalAllocator,
    ThreadLocalAllocator: LocalAllocator,
> {
    pub current_allocator_in_use: CurrentAllocatorInUse,
    pub coroutine_local_allocator: Option<CoroutineLocalAllocator>,
    pub thread_local_allocator: Option<ThreadLocalAllocator>,
}

impl<CoroutineLocalAllocator: LocalAllocator, ThreadLocalAllocator: LocalAllocator>
    PerThreadState<CoroutineLocalAllocator, ThreadLocalAllocator>
{
    #[doc(hidden)]
    #[inline(always)]
    pub const fn empty() -> Self {
        Self {
            current_allocator_in_use: CurrentAllocatorInUse::Global,
            coroutine_local_allocator: None,
            thread_local_allocator: None,
        }
    }

    #[doc(hidden)]
    #[inline(always)]
    pub const fn thread_local_first() -> Self {
        Self {
            current_allocator_in_use: CurrentAllocatorInUse::ThreadLocal,
            coroutine_local_allocator: None,
            thread_local_allocator: None,
        }
    }
}