/**
 * Gets a profile for the given id.
 *
 * @param int $profile_id
 *   The profile id.
 * @param array $headers
 *   Header information from the data file.
 *
 * @return array
 *   The profile, or NULL if no profile was found
 */
function fiftyone_degrees_get_profile_from_id($profile_id, $headers)
{
    $lower = 0;
    $upper = $headers['profile_offsets_count'] - 1;
    $middle = 0;
    while ($lower <= $upper) {
        $middle = $lower + (int) (($upper - $lower) / 2);
        $profile_offset = fiftyone_degrees_get_profile_offset_id_from_index($middle, $headers);
        if ($profile_offset['profile_id'] == $profile_id) {
            return fiftyone_degrees_read_profile($profile_offset['offset'] - $headers['profile_offset'], $headers);
        } elseif ($profile_offset['profile_id'] > $profile_id) {
            $upper = $middle - 1;
        } else {
            $lower = $middle + 1;
        }
    }
    return NULL;
}
예제 #2
0
function fiftyone_degrees_gallery_get_profiles(&$offset, $limit, $hardware_value_id, $headers)
{
    $end_offset = $headers['profile_length'];
    $profiles = array();
    while ($offset < $end_offset) {
        $_fiftyone_degrees_data_file = fiftyone_degrees_get_data_file($offset + $headers['profile_offset']);
        $profile = array();
        $profile['component_id'] = fiftyone_degrees_read_byte($_fiftyone_degrees_data_file);
        $profile['unique_id'] = fiftyone_degrees_read_int($_fiftyone_degrees_data_file);
        $profile['profile_value_count'] = fiftyone_degrees_read_int($_fiftyone_degrees_data_file);
        $profile['signature_count'] = fiftyone_degrees_read_int($_fiftyone_degrees_data_file);
        if ($profile['component_id'] == 0) {
            $_fiftyone_degrees_data_file = fiftyone_degrees_get_data_file($offset + 1 + 4 + 4 + 4 + 4 * 6 + $headers['profile_offset']);
            $profile_hardware_value_id = fiftyone_degrees_read_int($_fiftyone_degrees_data_file);
            if ($profile_hardware_value_id == $hardware_value_id) {
                $profile = fiftyone_degrees_read_profile($offset, $headers);
                //if (in_array($hardware_value_id,  $profile['profile_values'])) {
                $profiles[] = $profile;
                //var_dump($profile['profile_values']);
                if (count($profiles) >= $limit) {
                    break;
                }
                //}
            }
        }
        $offset += 1 + 4 + 4 + 4 + $profile['profile_value_count'] * 4 + 4 * $profile['signature_count'];
    }
    return $profiles;
}