Loads all the attributes of an entry.

        Once executed, all the attributes should have been loaded in the
        attribute *attrs* instance attribute.

        Args:
            mft_config (:obj:`MFTConfig`) - An instance of MFTConfig, as this tells
                how the library will interpret data.
            attrs_view (memoryview(bytearray)) - A binary stream that starts at
                the first attribute until the end of the entry

def _load_attributes(self, mft_config, attrs_view):
        '''Loads all the attributes of an entry.

        Once executed, all the attributes should have been loaded in the
        attribute *attrs* instance attribute.

        Args:
            mft_config (:obj:`MFTConfig`) - An instance of MFTConfig, as this tells
                how the library will interpret data.
            attrs_view (memoryview(bytearray)) - A binary stream that starts at
                the first attribute until the end of the entry
        '''
        offset = 0
        load_attrs = mft_config.attribute_load_list

        while (attrs_view[offset:offset+4] != b'\xff\xff\xff\xff'):
            attr_type, attr_len, non_resident = _get_attr_info(attrs_view[offset:])
            if attr_type in load_attrs:
                # pass all the information to the attr, as we don't know how
                # much content the attribute has
                attr = Attribute.create_from_binary(non_resident, mft_config.load_dataruns, attrs_view[offset:])
                if not attr.header.attr_type_id is AttrTypes.DATA:
                    self.attrs[attr.header.attr_type_id].append(attr) #add an attribute
                else:
                    self._add_data_attribute(attr)
            offset += attr_len