annotate nodetype.py @ 1:d8a11a5981e2

start cvs
author drewp
date Wed, 03 Jul 2002 09:43:24 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
1 """each node descends from this base class"""
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
2
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
3 class Node:
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
4 def __init__(self):
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
5 """TBD"""
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
6 self.ops = Ops()
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
7 ''' there should be default ports, just to give people a template:
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
8 self.iports = [InputPort("default")]
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
9 self.oports = [OutputPort("default")]
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
10
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
11 # no params
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
12 self.params = []
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
13
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
14 # initialize state with created op? no way
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
15 # here's why: 1. we would need to pass stateaccess into this function
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
16 # and they would be allowed to initialize their state here
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
17 # 2. scheduler/statemanager will call created when it's good and ready,
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
18 # ok? no need to push it!
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
19 # unless... we should put real init code in NodeType or Node(Instance)
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
20 # inits. that might be better than having a whole op for it.
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
21
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
22 '''
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
23 def get_state(self, stateaccess):
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
24 """This is similar to the pickle.__getstate__ method, except
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
25 we need this alternate version in order to give the node
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
26 (which holds no state) access to its instance's state.
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
27
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
28 If your node keeps some transient items in its state dict
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
29 (such as a buffer of recently received inputs), it may want to
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
30 return a copy of the state dict without those items. set_state
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
31 should restore them properly (if they're missing from the
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
32 current state, which they might not be).
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
33
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
34 get_state might be called at any time, and it's certainly not
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
35 guaranteed that the node instance is going out of service.
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
36 get_state might get called to checkpoint the nodes for a
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
37 backup, for example. set_state might also get called anytime.
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
38 """
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
39 return stateaccess
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
40 def set_state(self, stateaccess, dict):
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
41 """dict (named after the pickle.__setstate__ argument) is
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
42 always a value that was previously returned from
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
43 get_state. Don't adjust the current node's state, of course;
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
44 use dict to update stateaccess. If there were elements
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
45 missing from dict (see the note in get_state for why this
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
46 might be the case), you should restore them here as
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
47 appropriate.
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
48 """
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
49 stateaccess.update(dict)
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
50
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
51 # warning: pseduocode
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
52 class NodeInstance:
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
53 ip_addr?
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
54 get_this_nodes_url()
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
55
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
56 type = the node type (a subclass of Node)
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
57 ops (get from type)
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
58 input,output = the ports that are created for the node instance
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
59 state = associated state
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
60
d8a11a5981e2 start cvs
drewp
parents:
diff changeset
61