Commit | Line | Data |
---|---|---|
8ee66edd FC |
1 | from functools import wraps |
2 | ||
3 | ||
4 | def 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 | ||
15 | def 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 | ||
26 | class 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 |