1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use information::InformationAssociator;
use std::any::Any;
use utilities;

pub trait GeneralInformationAssociator {
    fn add_information(&mut self, vertex_id: usize, information: &mut Any);

    fn remove_information(&mut self, vertex_id: usize);
}

impl <TBaseInformation> GeneralInformationAssociator for InformationAssociator<TBaseInformation>
    where TBaseInformation: Any {
    fn add_information(&mut self, vertex_id: usize, information: &mut Any) {
        let self_as_base = self as &mut InformationAssociator<TBaseInformation>;
        let information_as_base = utilities::static_cast::<TBaseInformation>(information);
        self_as_base.add_information(vertex_id, information_as_base);
    }

    fn remove_information(&mut self, vertex_id: usize) {
        let self_as_base = self as &mut InformationAssociator<TBaseInformation>;
        self_as_base.remove_information(vertex_id);
    }
}