예제 #1
0
파일: main.c 프로젝트: samuell/frozen
static ssize_t data_timestamp_t_convert_to(data_t *src, fastcall_convert_to *fargs){ // {{{
	ssize_t                ret;
	char                   buffer[DEF_BUFFER_SIZE];
	uintmax_t              buffer_size       = sizeof(buffer);
	uintmax_t              transfered        = 0;
	timestamp_t           *fdata             = (timestamp_t *)src->ptr;
	time_t                 time_val          = timestamp_gettime(fdata);
	
	if(fargs->dest == NULL || fdata == NULL)
		return -EINVAL;
	
	switch( fargs->format ){
		case FORMAT(native):;
		case FORMAT(packed):;
			fastcall_write r_write = { { 5, ACTION_WRITE }, 0, &time_val, sizeof(time_val) };
			ret        = data_query(fargs->dest, &r_write);
			transfered = r_write.buffer_size;
			break;
		
		default:
			if( (ret = timestamp_to_string(time_val, buffer, &buffer_size, fargs->format)) != 0)
				return ret;
			
			fastcall_write r_write2 = { { 5, ACTION_WRITE }, 0, &buffer, buffer_size };
			ret        = data_query(fargs->dest, &r_write2);
			transfered = r_write.buffer_size;
			break;
	}
	if(fargs->header.nargs >= 5)
		fargs->transfered = transfered;
	
	return ret;
} // }}}
예제 #2
0
파일: main.c 프로젝트: samuell/frozen
static ssize_t data_timestamp_t_compare(data_t *data1, fastcall_compare *fargs){ // {{{
	ssize_t                cret;
	time_t                 data1_val, data2_val;
	
	if(fargs->data2 == NULL || fargs->data2->type != TYPE_TIMESTAMPT || fargs->data2->ptr == NULL)
		return -EINVAL;
	
	data1_val = timestamp_gettime((timestamp_t *)(data1->ptr));
	data2_val = timestamp_gettime((timestamp_t *)(fargs->data2->ptr));
	
	      if(data1_val == data2_val){ cret = 0;
	}else if(data1_val  < data2_val){ cret = 1;
	}else{                            cret = 2; }
	fargs->result = cret;
	return 0;
} // }}}
예제 #3
0
inline uint64 timestamp()
{
#ifdef KBE_USE_RDTSC
	return timestamp_rdtsc();
#else // KBE_USE_RDTSC
	if (g_timingMethod == RDTSC_TIMING_METHOD)
		return timestamp_rdtsc();
	else if (g_timingMethod == GET_TIME_OF_DAY_TIMING_METHOD)
		return timestamp_gettimeofday();
	else //if (g_timingMethod == GET_TIME_TIMING_METHOD)
		return timestamp_gettime();

#endif // KBE_USE_RDTSC
}
예제 #4
0
파일: main.c 프로젝트: samuell/frozen
static ssize_t data_timestamp_t_arith_no_arg(data_t *data, fastcall_arith_no_arg *fargs){ // {{{
	ssize_t                ret               = 0;
	timestamp_t           *fdata             = (timestamp_t *)data->ptr;
	time_t                 fdata_val         = timestamp_gettime(fdata);
	
	switch(fargs->header.action){
		case ACTION_INCREMENT:
			if(fdata_val == __MAX(time_t))
				return -EOVERFLOW;
			fdata_val++;
			break;
		case ACTION_DECREMENT:
			if(fdata_val == __MIN(time_t))
				return -EOVERFLOW;
			fdata_val--;
			break;
		default:
			return -ENOSYS;
	}
	fdata->time = fdata_val;
	fdata->now  = 0;
	return ret;
} // }}}