aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Erdmann <dywi@mailerd.de>2013-09-18 15:09:31 +0200
committerAndré Erdmann <dywi@mailerd.de>2013-09-18 15:11:13 +0200
commitf044064074f2f632f980233f604c362c42253de5 (patch)
treed0050151ebd6b2a35fee4c8bd1353fc9e98c7153 /roverlay/util
parentargparser: subparse_parsed() (diff)
downloadR_overlay-f044064074f2f632f980233f604c362c42253de5.tar.gz
R_overlay-f044064074f2f632f980233f604c362c42253de5.tar.bz2
R_overlay-f044064074f2f632f980233f604c362c42253de5.zip
roverlay-setup: "hooks" command
The "hooks" can now be used to add/show/remove hook links. Proper hook priority assignment ([0-9][0-9]-<hook name>.sh) is TODO.
Diffstat (limited to 'roverlay/util')
-rw-r--r--roverlay/util/counter.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/roverlay/util/counter.py b/roverlay/util/counter.py
index 6c0e699..2303863 100644
--- a/roverlay/util/counter.py
+++ b/roverlay/util/counter.py
@@ -4,6 +4,8 @@
# Distributed under the terms of the GNU General Public License;
# either version 2 of the License, or (at your option) any later version.
+import itertools
+
import roverlay.util.objects
try:
@@ -87,6 +89,73 @@ class UnsafeCounter ( AbstractCounter ):
# --- end of UnsafeCounter ---
+class SkippingPriorityGenerator ( AbstractCounter ):
+
+ def __init__ ( self, first_value=0, skip=None, use_long=False ):
+ super ( SkippingPriorityGenerator, self ).__init__ (
+ first_value=first_value, use_long=use_long
+ )
+ self._nums_available = None
+ self._generated = None
+ self._reset_generated ( skip )
+ # --- end of __init__ (...) ---
+
+ def _calculate_nums_available ( self ):
+ self._nums_available = None
+
+ if self._generated:
+ generated = set ( self._generated )
+ self._nums_available = [
+ k for k in range ( max ( generated ), self._initial_value, -1 )
+ if k not in generated
+ ]
+ # --- end of _calculate_nums_available (...) ---
+
+ def _reset_generated ( self, skip ):
+ self._nums_available = None
+ if skip is None:
+ self._generated = []
+ else:
+ self._generated = list ( skip )
+ self._calculate_nums_available()
+ # --- end of _reset_generated (...) ---
+
+ def reset ( self, skip=None ):
+ self.current_value = self._initial_value
+ self._reset_generated ( skip )
+ # --- end of reset (...) ---
+
+ def add_generated ( self, numbers ):
+ self._generated.extend ( numbers )
+ self._calculate_nums_available()
+ # --- end of add_generated (...) ---
+
+ def inc ( self ):
+ if self._nums_available:
+ value = self._nums_available.pop()
+ else:
+ value = self._current_value + 1
+
+ self._current_value = value
+ self._generated.append ( value )
+ return value
+ # --- end of inc (...) ---
+
+ def set_value ( self, value ):
+ raise NotImplementedError()
+ # --- end of set_value (...) ---
+
+ def change_value ( self ):
+ raise NotImplementedError()
+ # --- end of change_value (...) ---
+
+ def dec ( self ):
+ raise NotImplementedError()
+ # --- end of dec (...) ---
+
+# --- end of SkippingPriorityGenerator ---
+
+
class IDGenerator ( UnsafeCounter ):
pass
# --- end of IDGenerator ---