bloomchain/group/
bridge.rs

1use bloom::Bloom;
2use config::Config;
3use database::BloomDatabase;
4use position::Position;
5use group::position::Manager as PositionManager;
6use super::BloomGroupDatabase;
7
8/// Bridge between `BloomDatabase` and `BloomGroupDatabase`.
9pub struct GroupDatabaseBridge<'a> {
10	positioner: PositionManager,	
11	db: &'a BloomGroupDatabase,
12}
13
14impl<'a> GroupDatabaseBridge<'a> {
15	pub fn new(config: Config, db: &'a BloomGroupDatabase) -> Self {
16		let positioner = PositionManager::new(config.elements_per_index);
17
18		GroupDatabaseBridge {
19			positioner: positioner,
20			db: db,
21		}
22	}
23}
24
25impl<'a> BloomDatabase for GroupDatabaseBridge<'a> {
26	fn bloom_at(&self, position: &Position) -> Option<Bloom> {
27		let position = self.positioner.position(position);
28		self.db.blooms_at(&position.group)
29			.and_then(|group| group.blooms.into_iter().nth(position.number))
30	}
31}