vecdb/traits/
any_stored.rs1use std::path::PathBuf;
2
3use rawdb::{Database, Region};
4
5use crate::{AnyVec, Header, Result, Stamp};
6
7pub trait AnyStoredVec: AnyVec {
9 fn db_path(&self) -> PathBuf;
10
11 fn region(&self) -> &Region;
12
13 fn header(&self) -> &Header;
14
15 fn mut_header(&mut self) -> &mut Header;
16
17 fn saved_stamped_changes(&self) -> u16;
19
20 #[doc(hidden)]
23 fn write(&mut self) -> Result<bool>;
24
25 #[doc(hidden)]
26 fn db(&self) -> Database;
27
28 #[inline]
29 fn flush(&mut self) -> Result<()> {
30 if self.write()? {
31 self.region().flush()?;
32 }
33 Ok(())
34 }
35
36 fn real_stored_len(&self) -> usize;
38 fn stored_len(&self) -> usize;
40
41 fn update_stamp(&mut self, stamp: Stamp) {
42 self.mut_header().update_stamp(stamp);
43 }
44
45 fn stamp(&self) -> Stamp {
46 self.header().stamp()
47 }
48
49 #[inline]
50 fn stamped_write(&mut self, stamp: Stamp) -> Result<()> {
51 self.update_stamp(stamp);
52 self.write()?;
53 Ok(())
54 }
55
56 fn any_stamped_write_with_changes(&mut self, stamp: Stamp) -> Result<()>;
59
60 #[inline]
62 fn any_stamped_write_maybe_with_changes(
63 &mut self,
64 stamp: Stamp,
65 with_changes: bool,
66 ) -> Result<()> {
67 if with_changes {
68 self.any_stamped_write_with_changes(stamp)
69 } else {
70 self.stamped_write(stamp)
71 }
72 }
73
74 fn serialize_changes(&self) -> Result<Vec<u8>>;
75
76 fn remove(self) -> Result<()>;
78
79 fn any_reset(&mut self) -> Result<()>;
81}