summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCasey Dahlin <cdahlin@redhat.com>2008-12-23 11:50:42 -0500
committerCasey Dahlin <cdahlin@redhat.com>2008-12-23 11:50:42 -0500
commita96fea2733ad8d4cc88c35a92718f78a06f3a5b4 (patch)
treec24dac49040b9f67c270799ddbaf6dcbb443ece2
parent5be1c06227d163d5f22f7cb46670b9772ae0f9cf (diff)
downloadupstate-a96fea2733ad8d4cc88c35a92718f78a06f3a5b4.tar.gz
upstate-a96fea2733ad8d4cc88c35a92718f78a06f3a5b4.tar.xz
upstate-a96fea2733ad8d4cc88c35a92718f78a06f3a5b4.zip
Replace hash of hold counters with set of up states
We may not need hold counters after all
-rw-r--r--statemachine.py22
1 files changed, 11 insertions, 11 deletions
diff --git a/statemachine.py b/statemachine.py
index 5cdbadf..7d42c2e 100644
--- a/statemachine.py
+++ b/statemachine.py
@@ -14,7 +14,7 @@ class StateMachine:
"""
Create a new state machine
"""
- self.holds = {}
+ self.up = set()
self.deps = []
def assert_state(self, cat):
@@ -31,11 +31,11 @@ class StateMachine:
else:
found.append(res)
if found == None:
- self.add_hold(cat)
+ self.up.add(cat)
return True
to_add = self.cat_cross(found)
for x in to_add:
- self.add_hold(x)
+ self.up.add(x)
return True
def cat_cross(self, found):
@@ -76,10 +76,10 @@ class StateMachine:
"""
Add a hold to a state. Does not check dependencies.
"""
- if self.holds.has_key(cat):
- self.holds[cat] = self.holds[cat] + 1
- else:
- self.holds[cat] = 1
+ for x in self.up:
+ if cat.subset_of(x):
+ return
+ self.up.add(cat)
def get_satisfied_states(self, dependents, dependencies):
"""
@@ -88,9 +88,9 @@ class StateMachine:
could match states in `dependencies`.
"""
retval = []
- for key, val in self.holds.iteritems():
- if dependencies.equiv(key) and val > 0:
- retval.append(dependents.fill(key.args))
+ for cat in self.up:
+ if dependencies.equiv(cat):
+ retval.append(dependents.fill(cat.args))
return set(retval) | dependents.inverse_set()
def get_applicable_deps(self, cat):
@@ -105,7 +105,7 @@ class StateMachine:
return retval
def __str__(self):
- return "\n".join(["%s: %s" % (v, k) for k, v in self.holds.iteritems()])
+ return "\n".join(["%s" % k for k in self.up])
def __repr__(self):
return str(self)