def _get_key_ranges(key, mask): """ Get a generator of base_key, n_keys pairs that represent ranges allowed by the mask :param key: The base key :param mask: The mask """ unwrapped_mask = utility_calls.expand_to_bit_array(mask) first_zeros = list() remaining_zeros = list() pos = len(unwrapped_mask) - 1 # Keep the indices of the first set of zeros while pos >= 0 and unwrapped_mask[pos] == 0: first_zeros.append(pos) pos -= 1 # Find all the remaining zeros while pos >= 0: if unwrapped_mask[pos] == 0: remaining_zeros.append(pos) pos -= 1 # Loop over 2^len(remaining_zeros) to produce the base key, # with n_keys being 2^len(first_zeros) n_sets = 2 ** len(remaining_zeros) n_keys = 2 ** len(first_zeros) unwrapped_key = utility_calls.expand_to_bit_array(key) for value in xrange(n_sets): generated_key = numpy.copy(unwrapped_key) unwrapped_value = utility_calls.expand_to_bit_array(value)[ -len(remaining_zeros):] generated_key[remaining_zeros] = unwrapped_value yield utility_calls.compress_from_bit_array(generated_key), n_keys
def _get_key_ranges(key, mask): """ Get a generator of base_key, n_keys pairs that represent ranges allowed by the mask :param key: The base key :param mask: The mask """ unwrapped_mask = utility_calls.expand_to_bit_array(mask) first_zeros = list() remaining_zeros = list() pos = len(unwrapped_mask) - 1 # Keep the indices of the first set of zeros while pos >= 0 and unwrapped_mask[pos] == 0: first_zeros.append(pos) pos -= 1 # Find all the remaining zeros while pos >= 0: if unwrapped_mask[pos] == 0: remaining_zeros.append(pos) pos -= 1 # Loop over 2^len(remaining_zeros) to produce the base key, # with n_keys being 2^len(first_zeros) n_sets = 2**len(remaining_zeros) n_keys = 2**len(first_zeros) unwrapped_key = utility_calls.expand_to_bit_array(key) for value in xrange(n_sets): generated_key = numpy.copy(unwrapped_key) unwrapped_value = utility_calls.expand_to_bit_array( value)[-len(remaining_zeros):] generated_key[remaining_zeros] = unwrapped_value yield utility_calls.compress_from_bit_array(generated_key), n_keys
def _get_next_key(self): # Form the key from the value of the fields expanded_key = numpy.zeros(32, dtype="uint8") for field in self._fields: field_ones = self._field_ones[field] expanded_value = expand_to_bit_array(self._field_value[field]) expanded_key[field_ones] = expanded_value[-len(field_ones):] key = compress_from_bit_array(expanded_key) # Return the generated key return key
def _get_next_key(self): # Form the key from the value of the fields expanded_key = numpy.zeros(32, dtype="uint8") for field in self._fields: field_ones = self._field_ones[field] expanded_value = utility_calls.expand_to_bit_array( self._field_value[field]) expanded_key[field_ones] = expanded_value[-len(field_ones):] key = utility_calls.compress_from_bit_array(expanded_key) # Return the generated key return key