aboutsummaryrefslogtreecommitdiffstats
path: root/resources/tools/presentation/new/jumpavg/BitCountingGroupList.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/tools/presentation/new/jumpavg/BitCountingGroupList.py')
-rw-r--r--resources/tools/presentation/new/jumpavg/BitCountingGroupList.py35
1 files changed, 20 insertions, 15 deletions
diff --git a/resources/tools/presentation/new/jumpavg/BitCountingGroupList.py b/resources/tools/presentation/new/jumpavg/BitCountingGroupList.py
index 7da0656782..1f69c0635d 100644
--- a/resources/tools/presentation/new/jumpavg/BitCountingGroupList.py
+++ b/resources/tools/presentation/new/jumpavg/BitCountingGroupList.py
@@ -11,11 +11,26 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+"""Module holding BitCountingGroupList class."""
+
from BitCountingGroup import BitCountingGroup
from BitCountingMetadataFactory import BitCountingMetadataFactory
-class BitCountingGroupList(object):
+class BitCountingGroupList(list):
+ """List of BitCountingGroup which tracks overall bit count.
+
+ This is useful, as bit count of a subsequent group
+ depends on average of the previous group.
+ Having the logic encapsulated here spares the caller
+ the effort to pass averages around.
+
+ Method with_value_added_to_last_group() delegates to BitCountingGroup,
+ with_group_appended() adds new group with recalculated bits.
+
+ TODO: last_group.metadata_factory.max_value in with_group_appended()
+ is ugly, find a more natural class design.
+ """
def __init__(self, group_list=[], bits=None):
"""Create a group list from given list of groups.
@@ -25,7 +40,7 @@ class BitCountingGroupList(object):
:type group_list: list of BitCountingGroup
:type bits: float or None
"""
- self.group_list = group_list
+ super(BitCountingGroupList, self).__init__(group_list)
if bits is not None:
self.bits = bits
return
@@ -34,16 +49,6 @@ class BitCountingGroupList(object):
bits += group.metadata.bits
self.bits = bits
- def __getitem__(self, index):
- """Return group at the index. This makes self iterable.
-
- :param index: The position in the array of groups.
- :type index: int
- :returns: Group at the position.
- :rtype: BitCountingGroup
- """
- return self.group_list[index]
-
def with_group_appended(self, group):
"""Create and return new group list with given group more than self.
@@ -54,7 +59,7 @@ class BitCountingGroupList(object):
:returns: New group list with added group.
:rtype: BitCountingGroupList
"""
- group_list = list(self.group_list)
+ group_list = list(self)
if group_list:
last_group = group_list[-1]
factory = BitCountingMetadataFactory(
@@ -73,10 +78,10 @@ class BitCountingGroupList(object):
:returns: New group list with the last group updated.
:rtype: BitCountingGroupList
"""
- last_group = self.group_list[-1]
+ group_list = list(self)
+ last_group = group_list[-1]
bits_before = last_group.metadata.bits
last_group = last_group.with_run_added(value)
- group_list = list(self.group_list)
group_list[-1] = last_group
bits = self.bits - bits_before + last_group.metadata.bits
return BitCountingGroupList(group_list, bits)