Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////
  2. // Database part - I have no control over this
  3. //////////////////////////////////////////////////////////////////
  4. struct Database(std::vec::Vec<u8>);
  5. impl Database {
  6. fn get_txn<'db>(&'db self) -> Transaction<'db> {
  7. Transaction{
  8. db: self,
  9. }
  10. }
  11. }
  12.  
  13. struct Transaction<'db> {
  14. db: &'db Database,
  15. }
  16. impl<'db> Transaction<'db> {
  17. fn iter(&'db self) -> DatabaseIterator<'db,'db> {
  18. DatabaseIterator{
  19. transaction: self,
  20. iter: self.db.0.iter()
  21. }
  22. }
  23. }
  24.  
  25. struct DatabaseIterator<'txn,'db> {
  26. transaction: &'txn Transaction<'db>,
  27. iter: std::slice::Iter<'txn, u8>,
  28. }
  29. impl<'txn,'db> Iterator for DatabaseIterator<'txn,'db> {
  30. type Item = &'txn u8;
  31.  
  32. fn next(&mut self) -> Option<&'txn u8> {
  33. self.iter.next()
  34. }
  35. }
  36.  
  37. //////////////////////////////////////////////////////////////////
  38. // Application part
  39. //////////////////////////////////////////////////////////////////
  40.  
  41. struct DatabaseBackedObject {
  42. db: Database,
  43. }
  44. impl DatabaseBackedObject {
  45. fn iter<'db>(&'db self) -> DatabaseBackedObjectIterator<'db> {
  46. let txn = self.db.get_txn();
  47. DatabaseBackedObjectIterator {
  48. txn,
  49. iter: txn.iter(),
  50. }
  51. }
  52. }
  53.  
  54. struct DatabaseBackedObjectIterator<'dbo> {
  55. txn: Transaction<'dbo>,
  56. iter: DatabaseIterator<'dbo,'dbo>,
  57. }
  58. impl<'dbo> Iterator for DatabaseBackedObjectIterator<'dbo> {
  59. type Item = &'dbo u8;
  60. fn next(&mut self) -> Option<&'dbo u8> {
  61. self.iter.next()
  62. }
  63. }
  64.  
  65.  
  66.  
  67. fn main() {
  68. let db = Database(vec![1,2,3]);
  69. let dbo = DatabaseBackedObject{db};
  70. for x in dbo.iter() {
  71. println!("{}", x);
  72. }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement