ya2 · news · projects · code · about

removed uml diagrams
[pmachines.git] / ya2 / computer_proxy.py
CommitLineData
8ee66edd
FC
1from functools import wraps
2
3
4def compute_once(fun):
5 @wraps(fun)
6 def wrapper(*args, **kwargs):
7 self = args[0]
8 key = fun.__name__, args # add support for kwargs
9 if key not in self.buffered_vals:
10 self.buffered_vals[key] = fun(*args, **kwargs)
11 return self.buffered_vals[key]
12 return wrapper
13
14
15def once_a_frame(fun):
16 @wraps(fun)
17 def wrapper(*args, **kwargs):
18 self = args[0]
19 key = fun.__name__, args # add support for kwargs
20 if key not in self.buffered_vals_frm:
21 self.buffered_vals_frm[key] = fun(*args, **kwargs)
22 return self.buffered_vals_frm[key]
23 return wrapper
24
25
26class ComputerProxy:
27
28 def __init__(self):
29 self.eng.attach_obs(self.on_start_frame)
30 # there are issues if the object has another on_start_frame
31 self.buffered_vals, self.buffered_vals_frm = {}, {}
32
33 def on_start_frame(self):
34 self.buffered_vals_frm = {}
35
36 def destroy(self):
37 self.eng.detach_obs(self.on_start_frame)
38 self.buffered_vals = self.buffered_vals_frm = None