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; } // }}}
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; } // }}}
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 }
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; } // }}}