1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4#![allow(dead_code)]
5#![allow(unnecessary_transmutes)]
6#![allow(clippy::all)]
7
8use std::ops::{Deref, DerefMut, Index};
9
10include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
11
12impl<T> Index<usize> for ImVector<T> {
13 type Output = T;
14
15 fn index(&self, index: usize) -> &Self::Output {
16 if index >= self.Size as usize {
17 panic!("ImVector out of bounds");
18 }
19 unsafe { &*self.Data.add(index) }
20 }
21}
22
23impl<T> Deref for ImVector<T> {
24 type Target = [T];
25 fn deref(&self) -> &[T] {
26 unsafe {
27 if self.Size == 0 {
28 &[]
30 } else {
31 std::slice::from_raw_parts(self.Data, self.Size as usize)
32 }
33 }
34 }
35}
36
37impl<T> DerefMut for ImVector<T> {
38 fn deref_mut(&mut self) -> &mut [T] {
39 unsafe {
40 if self.Size == 0 {
41 &mut []
43 } else {
44 std::slice::from_raw_parts_mut(self.Data, self.Size as usize)
45 }
46 }
47 }
48}
49
50impl<'a, T> IntoIterator for &'a ImVector<T> {
51 type Item = &'a T;
52 type IntoIter = std::slice::Iter<'a, T>;
53 fn into_iter(self) -> Self::IntoIter {
54 self.deref().into_iter()
55 }
56}
57
58impl<'a, T> IntoIterator for &'a mut ImVector<T> {
59 type Item = &'a mut T;
60 type IntoIter = std::slice::IterMut<'a, T>;
61 fn into_iter(self) -> Self::IntoIter {
62 self.deref_mut().into_iter()
63 }
64}
65
66#[cfg(target_env = "msvc")]
67impl From<ImVec2_rr> for ImVec2 {
68 fn from(rr: ImVec2_rr) -> ImVec2 {
69 ImVec2 { x: rr.x, y: rr.y }
70 }
71}