oxidize_pdf/objects/
array.rs1use crate::objects::Object;
2
3#[derive(Debug, Clone)]
4pub struct Array {
5 elements: Vec<Object>,
6}
7
8impl Array {
9 pub fn new() -> Self {
10 Self {
11 elements: Vec::new(),
12 }
13 }
14
15 pub fn with_capacity(capacity: usize) -> Self {
16 Self {
17 elements: Vec::with_capacity(capacity),
18 }
19 }
20
21 pub fn push(&mut self, object: impl Into<Object>) {
22 self.elements.push(object.into());
23 }
24
25 pub fn pop(&mut self) -> Option<Object> {
26 self.elements.pop()
27 }
28
29 pub fn insert(&mut self, index: usize, object: impl Into<Object>) {
30 self.elements.insert(index, object.into());
31 }
32
33 pub fn remove(&mut self, index: usize) -> Object {
34 self.elements.remove(index)
35 }
36
37 pub fn get(&self, index: usize) -> Option<&Object> {
38 self.elements.get(index)
39 }
40
41 pub fn get_mut(&mut self, index: usize) -> Option<&mut Object> {
42 self.elements.get_mut(index)
43 }
44
45 pub fn len(&self) -> usize {
46 self.elements.len()
47 }
48
49 pub fn is_empty(&self) -> bool {
50 self.elements.is_empty()
51 }
52
53 pub fn clear(&mut self) {
54 self.elements.clear();
55 }
56
57 pub fn iter(&self) -> impl Iterator<Item = &Object> {
58 self.elements.iter()
59 }
60
61 pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut Object> {
62 self.elements.iter_mut()
63 }
64}
65
66impl Default for Array {
67 fn default() -> Self {
68 Self::new()
69 }
70}
71
72impl From<Vec<Object>> for Array {
73 fn from(elements: Vec<Object>) -> Self {
74 Self { elements }
75 }
76}
77
78impl From<Array> for Vec<Object> {
79 fn from(array: Array) -> Self {
80 array.elements
81 }
82}
83
84impl FromIterator<Object> for Array {
85 fn from_iter<T: IntoIterator<Item = Object>>(iter: T) -> Self {
86 Self {
87 elements: iter.into_iter().collect(),
88 }
89 }
90}
91
92#[cfg(test)]
93mod tests;