jvmti_rs/wrapper/builder/
builder.rs

1use std::ptr;
2
3use crate::JVMTIEnv;
4use crate::sys::jint;
5
6pub trait Builder<T> {
7    fn build(&self) -> Vec<T>;
8}
9
10pub trait WithJvmtiEnvBuilder<'a, T> {
11    fn build(&self, _: &'a JVMTIEnv<'a>) -> Vec<T>;
12}
13
14pub trait AutoDeallocateBuilder<'a, T> {
15    fn build(&self, _: &'a JVMTIEnv<'a>) -> Vec<T>;
16}
17
18pub struct MutObjectArrayBuilder<T> {
19    pub count: jint,
20    pub items: *mut T,
21}
22
23impl<T> MutObjectArrayBuilder<T> {
24    pub fn new() -> MutObjectArrayBuilder<T> {
25        MutObjectArrayBuilder {
26            count: 0 as jint,
27            items: ptr::null_mut(),
28        }
29    }
30
31    pub fn with_size(size: jint) -> MutObjectArrayBuilder<T> {
32        MutObjectArrayBuilder {
33            count: size,
34            items: ptr::null_mut(),
35        }
36    }
37
38    pub fn create(count: jint, items_ptr: *mut T) -> MutObjectArrayBuilder<T> {
39        MutObjectArrayBuilder {
40            count,
41            items: items_ptr,
42        }
43    }
44}
45
46pub struct MutAutoDeallocateObjectArrayBuilder<T> {
47    pub count: jint,
48    pub items: *mut T,
49}
50
51impl<T> MutAutoDeallocateObjectArrayBuilder<T> {
52    pub fn new() -> MutAutoDeallocateObjectArrayBuilder<T> {
53        MutAutoDeallocateObjectArrayBuilder {
54            count: 0 as jint,
55            items: ptr::null_mut(),
56        }
57    }
58
59    pub fn with_size(size: jint) -> MutAutoDeallocateObjectArrayBuilder<T> {
60        MutAutoDeallocateObjectArrayBuilder {
61            count: size,
62            items: ptr::null_mut(),
63        }
64    }
65
66    pub fn create(count: jint, items_ptr: *mut T) -> MutAutoDeallocateObjectArrayBuilder<T> {
67        MutAutoDeallocateObjectArrayBuilder {
68            count,
69            items: items_ptr,
70        }
71    }
72}
73
74pub struct ObjectArrayBuilder<T> {
75    pub count: jint,
76    pub items: *const T,
77}
78
79impl<T> ObjectArrayBuilder<T> {
80    pub fn new(count: jint, items_ptr: *const T) -> ObjectArrayBuilder<T> {
81        ObjectArrayBuilder {
82            count,
83            items: items_ptr,
84        }
85    }
86}