X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Ftools%2Fpresentation%2Fnew%2Fjumpavg%2FBitCountingGroupList.py;h=1f69c0635d69606e4a398f633358063974888461;hp=7da065678276ee0b69898ff36e292537834b6c22;hb=a2a0ab1cdec3567dcad46c2000337707777aa0ca;hpb=5120b1082aa70f6e75511e9d95a2a7c303e25f9a 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)