C++ std::vector<T> and Rust std::vec::Vec<T> support
Add basic std::vector and std::vec::Vec support across FFI boundary.
diff --git a/src/rust_vec.rs b/src/rust_vec.rs
new file mode 100644
index 0000000..a28570d
--- /dev/null
+++ b/src/rust_vec.rs
@@ -0,0 +1,39 @@
+use crate::vector::RealVector;
+use crate::vector::VectorTarget;
+
+#[repr(C)]
+pub struct RustVec<T: VectorTarget<T>> {
+ repr: Vec<T>,
+}
+
+impl<T: VectorTarget<T>> RustVec<T> {
+ pub fn from(v: Vec<T>) -> Self {
+ RustVec { repr: v }
+ }
+
+ pub fn from_ref(v: &Vec<T>) -> &Self {
+ unsafe { std::mem::transmute::<&Vec<T>, &RustVec<T>>(v) }
+ }
+
+ pub fn into_vec(self) -> Vec<T> {
+ self.repr
+ }
+
+ pub fn as_vec(&self) -> &Vec<T> {
+ &self.repr
+ }
+
+ pub fn as_mut_vec(&mut self) -> &mut Vec<T> {
+ &mut self.repr
+ }
+
+ pub fn len(&self) -> usize {
+ self.repr.len()
+ }
+
+ pub fn into_vector(&self, vec: &mut RealVector<T>) {
+ for item in &self.repr {
+ vec.push_back(item);
+ }
+ }
+}