#![allow(dead_code)]
use std::collections::BTreeMap;
pub enum Event<E> {
Args(E),
Missing,
}
pub struct EventPublisher<E> {
handlers: BTreeMap<usize, fn(&Event<E>)>,
}
impl<E> EventPublisher<E> {
pub fn new() -> EventPublisher<E> {
EventPublisher{
handlers: BTreeMap::<usize, fn(&Event<E>)>::new()
}
}
pub fn subscribe_handler(&mut self, handler: fn(&Event<E>)){
let p_handler: usize;
unsafe{
p_handler = *(handler as *const usize);
}
self.handlers.insert(p_handler, handler);
}
pub fn unsubscribe_handler(&mut self, handler: fn(&Event<E>)) -> bool {
let p_handler: usize;
unsafe{
p_handler = *(handler as *const usize);
}
match self.handlers.remove(&p_handler){
Some(_) => true,
None => false,
}
}
pub fn publish_event(&self, event: &Event<E>){
for (_, handler) in self.handlers.iter(){
handler(event);
}
}
}