Source code for spinn_front_end_common.interface.buffer_management.storage_objects.end_buffering_state

# Copyright (c) 2017-2019 The University of Manchester
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

from .channel_buffer_state import ChannelBufferState
from spinn_front_end_common.utilities.constants import BYTES_PER_WORD


[docs]class EndBufferingState(object): """ Stores the buffering state at the end of a simulation. """ __slots__ = [ #: a list of channel state, where each channel is stored in a #: ChannelBufferState object "_list_channel_buffer_state", #: the final state stuff "_buffering_out_fsm_state" ] def __init__(self, buffering_out_fsm_state, list_channel_buffer_state): """ :param buffering_out_fsm_state: Final sequence number received :type buffering_out_fsm_state: int :param list_channel_buffer_state: a list of channel state, where each\ channel is stored in a ChannelBufferState object :type list_channel_buffer_state: \ list(~spinn_front_end_common.interface.buffer_management.storage_objects.ChannelBufferState) """ self._buffering_out_fsm_state = buffering_out_fsm_state self._list_channel_buffer_state = list_channel_buffer_state @property def buffering_out_fsm_state(self): """ :rtype: int """ return self._buffering_out_fsm_state
[docs] def channel_buffer_state(self, i): """ :param i: the index into the buffer states :type i: int :rtype: \ ~spinn_front_end_common.interface.buffer_management.storage_objects.ChannelBufferState """ return self._list_channel_buffer_state[i]
[docs] def get_state_for_region(self, region_id): """ :param region_id: The region identifier :type region_id: int :rtype: None or \ ~spinn_front_end_common.interface.buffer_management.storage_objects.ChannelBufferState """ for state in self._list_channel_buffer_state: if state.region_id == region_id: return state return None
[docs] def get_missing_info_for_region(self, region_id): """ :rtype: bool or None """ state = self.get_state_for_region(region_id) return None if state is None else state.missing_info
[docs] @staticmethod def size_of_region(n_regions_to_record): """ :param n_regions_to_record: Number of regions to be recorded :type n_regions_to_record: int :return: Size of region required to hold that state, in bytes :rtype: int """ size_of_header = BYTES_PER_WORD * (2 + n_regions_to_record) # add size needed for the data region addresses size_of_header += BYTES_PER_WORD * n_regions_to_record size_of_channel_state = ChannelBufferState.size_of_channel_state() return size_of_header + n_regions_to_record * size_of_channel_state