cobia/cape_array_real.rs
1use crate::{COBIAError, CapeArrayRealInFromProvider, C};
2use crate::cape_array::{CapeArrayIn,CapeArrayOut,ArrayInterface};
3use crate::{CapeArrayRealProviderIn,CapeArrayRealProviderOut};
4
5impl ArrayInterface<C::CapeReal> for C::ICapeArrayReal {
6
7 fn get(&mut self,data:&mut *mut C::CapeReal,size:&mut C::CapeSize) {
8 unsafe { (*self.vTbl).get.unwrap()(self.me,data as *mut *mut C::CapeReal,size) };
9 }
10
11 fn set(&mut self,data:&mut *mut C::CapeReal,size:C::CapeSize) -> C::CapeResult {
12 unsafe { (*self.vTbl).setsize.unwrap()(self.me,size,data as *mut *mut C::CapeReal) }
13 }
14
15 fn get_const(&self,data:&mut *const C::CapeReal,size:&mut C::CapeSize) {
16 unsafe { (*self.vTbl).get.unwrap()(self.me,data as *mut *const C::CapeReal as *mut *mut C::CapeReal,size) };
17 }
18}
19
20/// CapeArrayRealIn wraps an ICapeArrayReal interface pointer.
21///
22/// Given an ICapeArrayReal interface pointer, this allows setting
23/// and getting the elements.
24///
25/// This interface is typically used as arguments to rust methods
26/// on traits that are generated from CAPE-OPEN interfaces that have
27/// ICapeArrayReal input arguments.
28///
29/// # Examples
30///
31/// ```
32/// use cobia::*;
33///
34/// fn test_content(a: &CapeArrayRealIn) {
35/// assert_eq!(a.as_vec(), vec![4.5,6.5]);
36/// }
37///
38/// let arr = cobia::CapeArrayRealSlice::new(&[4.5,6.5]);
39/// test_content(&CapeArrayRealInFromProvider::from(&arr).as_cape_array_real_in());
40/// ```
41
42pub type CapeArrayRealIn<'a> = CapeArrayIn<'a,C::CapeReal,C::ICapeArrayReal>;
43
44impl<'a> CapeArrayRealProviderIn for CapeArrayRealIn<'a> {
45 fn as_cape_array_real_in(&self) -> C::ICapeArrayReal {
46 unsafe{**self.interface}
47 }
48}
49
50/// CapeArrayRealOut wraps an ICapeArrayReal interface pointer.
51///
52/// Given an ICapeArrayReal interface pointer, this allows setting
53/// and getting the elements.
54///
55/// This interface is typically used as arguments to rust methods
56/// on traits that are generated from CAPE-OPEN interfaces that have
57/// ICapeArrayReal output arguments.
58///
59/// # Examples
60///
61/// ```
62/// use cobia::*;
63///
64/// fn set_content(a: &mut CapeArrayRealOut) {
65/// a.put_array(&[4.5,6.5]).unwrap();
66/// }
67///
68/// let mut arr = cobia::CapeArrayRealVec::new();
69/// set_content(&mut CapeArrayRealOutFromProvider::from(&mut arr).as_cape_array_real_out());
70/// assert_eq!(arr.as_vec(), &vec![4.5,6.5]);
71/// ```
72
73pub type CapeArrayRealOut<'a> = CapeArrayOut<'a,C::CapeReal,C::ICapeArrayReal>;
74
75impl<'a> CapeArrayRealOut<'a> {
76
77 /// Set the content of the real array from any object that implements CapeArrayRealProviderIn.
78 ///
79 /// # Arguments
80 /// * `array` - An object that implements CapeArrayRealProviderIn
81 ///
82 /// # Examples
83 ///
84 /// ```
85 /// use cobia::*;
86 /// let mut arr = cobia::CapeArrayRealVec::new();
87 /// let mut arr1 = cobia::CapeArrayRealVec::from_slice(&vec![125.1,-19.4,3.14]);
88 /// CapeArrayRealOutFromProvider::from(&mut arr).as_cape_array_real_out().set(&arr1);
89 /// assert_eq!(arr.as_vec(), &[125.1,-19.4,3.14]);
90 /// ```
91
92 pub fn set<T:CapeArrayRealProviderIn>(&mut self,array:&T) -> Result<(), COBIAError> {
93 let mut real_array_in_from_provider = CapeArrayRealInFromProvider::from(array);
94 let real_array=real_array_in_from_provider.as_cape_array_real_in();
95 self.resize(real_array.size())?;
96 for i in 0..real_array.size() {
97 self[i]=real_array[i];
98 }
99 Ok(())
100 }
101
102}
103
104impl<'a> CapeArrayRealProviderOut for CapeArrayRealOut<'a> {
105 fn as_cape_array_real_out(&mut self) -> C::ICapeArrayReal {
106 unsafe { **self.interface }
107 }
108}