Пример #1
0
void *realloc_array1(void *a, long m, int size) {

    long dimen[1];

    dimen[0] = m;

    return realloc_array(a, 1, dimen, size);
}
Пример #2
0
trie_tree* trie_tree_unserialize(tbyte* buf)
{
  trie_tree* tree = (trie_tree*)malloc(sizeof(trie_tree));
  memcpy(tree, buf, sizeof(trie_tree));
  int array_size = tree->node_array.max * tree->node_array.elem_size;
  realloc_array(&tree->node_array);
  memcpy(tree->node_array.data, buf + sizeof(trie_tree), array_size);
  return tree;
}
Пример #3
0
Файл: vector.c Проект: clyde7/iv
void vector_buffer_append(Vector_Buffer * buffer, Vector v)
{
    if (buffer->count == buffer->size)
    {
        buffer->size = (buffer->size == 0) ? 1 : buffer->size * 2;
        buffer->vectors = realloc_array(Vector, buffer->vectors, buffer->size);
    }

    buffer->vectors[buffer->count ++] = v;
}
Пример #4
0
int XVars::put(AMX* p, cell* v)
{
	for (int a = 0; a < num; ++a)
	{
		if ((head[a].amx == p) && (head[a].value == v))
			return a;
	}

	if ((num >= size) && realloc_array(size ? (size * 2) : 8))
		return -1;

	head[num].value = v;
	head[num].amx = p;
	
	return num++;
}
Пример #5
0
TTBIN_FILE *parse_ttbin_data(uint8_t *data, uint32_t size)
{
    uint8_t *end;
    TTBIN_FILE *file;
    int index;

    FILE_HEADER             *file_header = 0;
    FILE_SUMMARY_RECORD     *summary_record;
    FILE_GPS_RECORD         *gps_record;
    FILE_HEART_RATE_RECORD  *heart_rate_record;
    FILE_STATUS_RECORD      *status_record;
    FILE_TREADMILL_RECORD   *treadmill_record;
    FILE_SWIM_RECORD        *swim_record;
    FILE_LAP_RECORD         *lap_record;

    file = malloc(sizeof(TTBIN_FILE));
    memset(file, 0, sizeof(TTBIN_FILE));

    end = data + size;

    while (data < end)
    {
        uint8_t tag = *data++;
        switch (tag)
        {
        case TAG_FILE_HEADER:
            file_header = (FILE_HEADER*)data;
            data += sizeof(FILE_HEADER) + file_header->length_count * sizeof(RECORD_LENGTH);

            file->file_version    = file_header->file_version;
            memcpy(file->firmware_version, file_header->firmware_version, sizeof(file->firmware_version));
            file->product_id      = file_header->product_id;
            file->timestamp_local = file_header->timestamp;
            file->timestamp_utc   = file_header->timestamp - file_header->local_time_offset;
            break;
        case TAG_SUMMARY:
            summary_record = (FILE_SUMMARY_RECORD*)data;

            file->activity       = summary_record->activity;
            file->total_distance = summary_record->distance;
            file->duration       = summary_record->duration;
            file->total_calories = summary_record->calories;
            break;
        case TAG_STATUS:
            status_record = (FILE_STATUS_RECORD*)data;
            file->status_records = realloc(file->status_records, (file->status_record_count + 1) * sizeof(STATUS_RECORD));

            file->status_records[file->status_record_count].status    = status_record->status;
            file->status_records[file->status_record_count].activity  = status_record->activity;
            file->status_records[file->status_record_count].timestamp = status_record->timestamp;
            ++file->status_record_count;
            break;
        case TAG_GPS:
            gps_record = (FILE_GPS_RECORD*)data;

            /* if the GPS signal is lost, 0xffffffff is stored in the file */
            if (gps_record->timestamp == 0xffffffff)
                break;

            index = gps_record->timestamp - file->timestamp_utc;
            if (index < 0)
            {
                file->timestamp_utc   += index;
                file->timestamp_local += index;
                index = 0;
            }

            /* expand the array if necessary */
            realloc_array(file->gps_records, file->gps_record_count, index, sizeof(GPS_RECORD));

            file->gps_records[index].latitude     = gps_record->latitude * 1e-7f;
            file->gps_records[index].longitude    = gps_record->longitude * 1e-7f;
            file->gps_records[index].elevation    = 0.0f;
            file->gps_records[index].heading      = gps_record->heading / 100.0f;
            file->gps_records[index].speed        = gps_record->speed / 100.0f;
            file->gps_records[index].timestamp    = gps_record->timestamp;
            file->gps_records[index].calories     = gps_record->calories;
            file->gps_records[index].inc_distance = gps_record->inc_distance;
            file->gps_records[index].cum_distance = gps_record->cum_distance;
            file->gps_records[index].cycles       = gps_record->cycles;
            break;
        case TAG_HEART_RATE:
            heart_rate_record = (FILE_HEART_RATE_RECORD*)data;

            index = heart_rate_record->timestamp - file->timestamp_local;

            realloc_array(file->heart_rate_records, file->heart_rate_record_count, index, sizeof(HEART_RATE_RECORD));

            file->heart_rate_records[index].timestamp  = heart_rate_record->timestamp;
            file->heart_rate_records[index].heart_rate = heart_rate_record->heart_rate;
            break;
        case TAG_LAP:
            lap_record = (FILE_LAP_RECORD*)data;
            file->lap_records = realloc(file->lap_records, (file->lap_record_count + 1) * sizeof(LAP_RECORD));

            file->lap_records[file->lap_record_count].total_time     = lap_record->total_time;
            file->lap_records[file->lap_record_count].total_distance = lap_record->total_distance;
            file->lap_records[file->lap_record_count].total_calories = lap_record->total_calories;
            ++file->lap_record_count;
            break;
        case TAG_TREADMILL:
            treadmill_record = (FILE_TREADMILL_RECORD*)data;

            index = treadmill_record->timestamp - file->timestamp_local;

            /* expand the array if necessary */
            realloc_array(file->treadmill_records, file->treadmill_record_count, index, sizeof(TREADMILL_RECORD));

            file->treadmill_records[index].timestamp = treadmill_record->timestamp;
            file->treadmill_records[index].distance  = treadmill_record->distance;
            file->treadmill_records[index].calories  = treadmill_record->calories;
            file->treadmill_records[index].steps     = treadmill_record->steps;
            break;
        case TAG_SWIM:
            swim_record = (FILE_SWIM_RECORD*)data;

            index = swim_record->timestamp - file->timestamp_local;

            /* expand the array if necessary */
            realloc_array(file->swim_records, file->swim_record_count, index, sizeof(SWIM_RECORD));

            file->swim_records[index].timestamp      = swim_record->timestamp;
            file->swim_records[index].total_distance = swim_record->total_distance;
            file->swim_records[index].strokes        = swim_record->strokes;
            file->swim_records[index].completed_laps = swim_record->completed_laps;
            file->swim_records[index].total_calories = swim_record->total_calories;
            break;
        default:
            break;
        }

        /* we should have got a file header first... */
        if (!file_header)
        {
            free(file);
            return 0;
        }

        /* increment the data by the correct amount */
        if (tag != TAG_FILE_HEADER)
        {
            index = 0;
            while ((index < file_header->length_count) && (file_header->lengths[index].tag < tag))
                ++index;
            if ((index < file_header->length_count) && (file_header->lengths[index].tag == tag))
                data += file_header->lengths[index].length - 1;
            else
            {
                free(file);
                return 0;
            }
        }
    }

    return file;
}