Exemplo n.º 1
0
static PyObject *
curve_get_save(SKCurveObject * self, PyObject * args)
{
    CurveSegment * segment;
    PyObject * list;
    int i;

    list = PyList_New(self->len);
    if (!list)
	return NULL;

    segment = self->segments;

    for (i = 0; i < self->len; i++, segment++)
    {
	if (!save_segment(list, i, segment))
	    return NULL;
    }
    return list;
}
Exemplo n.º 2
0
int locate_segments(int table, segment_t *segment_table, long int size_ptr, int *ptr)
{
	int start_key, i;
	int segment_num;
	char *compress_ptr;
	
	compress_ptr = memalign(ALIGN, 2*size_ptr*sizeof(int));
	
	for(segment_num=0; segment_num<NUM_SEGMENTS; segment_num++) {
		// Заполнение сегмента
		#ifdef USE_FILE_DB
		if (table == R)
			load_segment(segment_table[segment_num].size, ptr, R_DB);
		if (table == S)
			load_segment(segment_table[segment_num].size, ptr, S_DB);
		#else
			if(segment_num == 0) {
				start_key = 0;
			}
			else {
				start_key = start_key + segment_table[segment_num-1].size;
			}
			gen_segment(table, segment_num, segment_table[segment_num].size, ptr, start_key);
			#ifdef CREATE_FILE_DB
				if (table == R)
					save_segment(segment_table[segment_num].size, ptr, R_DB);
				if (table == S)
					save_segment(segment_table[segment_num].size, ptr, S_DB);
			#endif
		#endif
		
		// Вывод сегмента на печать
		#ifdef USE_DEBUG_PRINT
			printf("\t\t");
			for(i=0; i<segment_table[segment_num].size; i++)
				printf(" (%d, %d)", ptr[db_index_key(segment_table[segment_num].size, i)], ptr[db_index_value(segment_table[segment_num].size, i)]);
			printf("\n");
		#endif
		
		// Сжатие сегмента
		#ifdef USE_COMPRESS
			segment_table[segment_num].compress_size = size_ptr;
			segment_compress(ptr, 2*sizeof(int)*segment_table[segment_num].size, compress_ptr, &segment_table[segment_num].compress_size);
		#else
			segment_table[segment_num].compress_size = 2*sizeof(int)*segment_table[segment_num].size;
		#endif
		
		// Выделение памяти для постоянного хранения сегмента
		segment_table[segment_num].ptr = (char *)memalign(ALIGN, segment_table[segment_num].compress_size+1);
		
		if(segment_table[segment_num].ptr == NULL) {
			printf("ERROR: could not allocate memmory for %dth segment!\n", segment_num);
			return -1;
		}
		
		// Копирование сегмента в место постоянного хранения
		#ifdef USE_COMPRESS
			str_copy(compress_ptr, segment_table[segment_num].ptr, segment_table[segment_num].compress_size+1);
		#else
			str_copy(ptr, segment_table[segment_num].ptr, segment_table[segment_num].compress_size+1);
		#endif
		
		// Вывод сжатого сегмента на печать
		#ifdef USE_DEBUG_PRINT
			printf("\t\t segment was compressed to %ld bytes (%s)\n", segment_table[segment_num].compress_size, segment_table[segment_num].ptr);
		#endif
	}
	
	free(compress_ptr);
	
	return 0;
}