Skip to main content

arr_o_gpu/arr_o_gpu/allocator/method/
allocate.rs

1use std::num::NonZeroU64;
2
3use uuid::Uuid;
4
5use crate::arr_o_gpu::allocator::Allocator;
6
7impl Allocator {
8    pub fn allocate(&mut self, size: u32) -> Result<monagement::Allocated, String> {
9        self.core
10            .allocate(NonZeroU64::new(size as u64).ok_or("size must be greater than 0")?)
11    }
12
13    // pub fn allocate(&mut self, data_length: u32) -> (u32, u32) {
14    //     let mut pointer = (SpaceType::RangeSpace(0), 0, 0);
15
16    //     // monagement branch
17    //     if !self.monanagement.is_empty() {
18    //         // not empty
19    //         for (_, (key, (_, range))) in self.monanagement.iter().enumerate() {
20    //             let len = range.end - range.start;
21    //             if data_length == len {
22    //                 // range is same => Range Mode
23    //                 let id = Uuid::new_v4().as_u128();
24    //                 pointer = (SpaceType::RangeSpace(id), range.start, range.end);
25
26    //                 let key = *key;
27    //                 self.monanagement.remove(&key);
28    //                 break;
29    //             } else if data_length < len {
30    //                 // range is bigger => Fragement Mode
31    //                 let id = Uuid::new_v4().as_u128();
32    //                 pointer = (
33    //                     SpaceType::FragmentSpace(id, 0),
34    //                     range.start,
35    //                     range.start + data_length,
36    //                 );
37
38    //                 // update range
39    //                 let key = *key;
40    //                 let start = range.start + data_length;
41    //                 let end = range.end;
42
43    //                 self.monanagement.remove(&key);
44    //                 self.monanagement.insert(start, (id, start..end));
45    //                 break;
46    //             }
47    //         }
48
49    //         if pointer.1 == 0 && pointer.2 == 0 {
50    //             // using last space
51    //             let id = Uuid::new_v4().as_u128();
52    //             pointer = (
53    //                 SpaceType::RangeSpace(id),
54    //                 self.last_space.0,
55    //                 self.last_space.0 + data_length,
56    //             );
57    //             // update last_space
58    //             let start = self.last_space.0 + data_length;
59    //             if start > self.last_space.1 {
60    //                 panic!("Allocator Error: Memory Overflow");
61    //             }
62    //             self.last_space.0 = start;
63    //         }
64    //     } else {
65    //         // empty
66    //         let id = Uuid::new_v4().as_u128();
67
68    //         pointer = (
69    //             SpaceType::RangeSpace(id),
70    //             self.last_space.0,
71    //             self.last_space.0 + data_length,
72    //         );
73    //         // update last_space
74    //         let start = self.last_space.0 + data_length;
75    //         if start > self.last_space.1 {
76    //             panic!("Allocator Error: Memory Overflow");
77    //         }
78    //         self.last_space.0 = start;
79    //     }
80    //     // monagement branch
81
82    //     pointer
83    // }
84}