jvmti_rs/wrapper/builder/
builder.rs1use 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}