jvmti_rs/wrapper/objects/
jallocate.rs

1use crate::{objects::*, JVMTIEnv};
2use jni_sys::jlong;
3use crate::sys::jmemory;
4
5#[derive(Clone)]
6pub struct JMemoryAllocate<'a> {
7    pub ptr: jmemory,
8    pub size: usize,
9    env: &'a JVMTIEnv<'a>,
10}
11
12impl<'a> JMemoryAllocate<'a> {
13    pub fn new<'b: 'a>(ptr: jmemory,
14                       size: jlong,
15                       env: &'b JVMTIEnv<'a>) -> JMemoryAllocate<'a> {
16        JMemoryAllocate {
17            ptr,
18            size: size as usize,
19            env,
20        }
21    }
22
23    pub fn deallocate(&self) {
24        if !self.ptr.is_null() {
25            self.env.deallocate(self).unwrap()
26        }
27    }
28}
29
30impl<'a> Drop for JMemoryAllocate<'a> {
31    fn drop(&mut self) {
32        self.deallocate()
33    }
34}
35
36impl<'a> JDeallocate<'a> for JMemoryAllocate<'a> {
37    fn as_deallocate_ptr(&self) -> jmemory {
38        self.ptr
39    }
40}