Supplementary Video: More Events CS 51 and CSCI E-51 April 5, 2014 .
Road map • The concept • Using events • Implementation of events • UI events 2:1
The concept 3:1
The concept 3:2
The concept 3:3
The concept 3:4
The concept 3:5
The concept 3:6
The concept 3:7
The concept 3:8
The concept 3:9
Basic event primitives . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:1
Basic event primitives . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:2
Basic event primitives . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:3
Basic event primitives . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:4
Basic event primitives . . . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:5
Basic event primitives . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:6
Basic event primitives . . . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:7
Basic event primitives . . . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:8
Basic event primitives . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:9
Basic event primitives . . . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:10
Basic event primitives . . . . . . . . . . . . . . . . . . module Event51 : sig type id type ’a event val new_event : unit -> ’a event val add_listener : ’a event -> (’a -> unit) -> id val fire_event : ’a event -> ’a -> unit val add_one_shot_listener : ’a event -> (’a -> unit) -> id val remove_listener : ’a event -> id -> unit · · · end 4:11
— To Emacs —
Event implementation . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:1
Event implementation . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:2
Event implementation . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:3
Event implementation . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:4
Event implementation . . . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:5
Event implementation . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:6
Event implementation . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:7
Event implementation . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:8
Event implementation . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:9
Event implementation . . . . . . . . . . . . . . . . type ’a waiter = { id : id; action : ’a -> unit } type ’a event = ’a waiter list ref let new_event () : ’a event = ref [] let add_listener ( e : ’a event) ( f : ’a -> unit) : id = let i = new_id () in e := { id = i; action = f } :: !e; i let fire_event ( e : ’a event) ( v : ’a) : unit = List.iter !e ~f:( fun w -> w.action v) 6:10
Recommend
More recommend