Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////////////////////////////////////////////////////
- // Database part - I have no control over this
- //////////////////////////////////////////////////////////////////
- struct Database(std::vec::Vec<u8>);
- impl Database {
- fn get_txn<'db>(&'db self) -> Transaction<'db> {
- Transaction{
- db: self,
- }
- }
- }
- struct Transaction<'db> {
- db: &'db Database,
- }
- impl<'db> Transaction<'db> {
- fn iter(&'db self) -> DatabaseIterator<'db,'db> {
- DatabaseIterator{
- transaction: self,
- iter: self.db.0.iter()
- }
- }
- }
- struct DatabaseIterator<'txn,'db> {
- transaction: &'txn Transaction<'db>,
- iter: std::slice::Iter<'txn, u8>,
- }
- impl<'txn,'db> Iterator for DatabaseIterator<'txn,'db> {
- type Item = &'txn u8;
- fn next(&mut self) -> Option<&'txn u8> {
- self.iter.next()
- }
- }
- //////////////////////////////////////////////////////////////////
- // Application part
- //////////////////////////////////////////////////////////////////
- struct DatabaseBackedObject {
- db: Database,
- }
- impl DatabaseBackedObject {
- fn iter<'db>(&'db self) -> DatabaseBackedObjectIterator<'db> {
- let txn = self.db.get_txn();
- DatabaseBackedObjectIterator {
- txn,
- iter: txn.iter(),
- }
- }
- }
- struct DatabaseBackedObjectIterator<'dbo> {
- txn: Transaction<'dbo>,
- iter: DatabaseIterator<'dbo,'dbo>,
- }
- impl<'dbo> Iterator for DatabaseBackedObjectIterator<'dbo> {
- type Item = &'dbo u8;
- fn next(&mut self) -> Option<&'dbo u8> {
- self.iter.next()
- }
- }
- fn main() {
- let db = Database(vec![1,2,3]);
- let dbo = DatabaseBackedObject{db};
- for x in dbo.iter() {
- println!("{}", x);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement