Ejemplo n.º 1
0
static void _to_serializable(flexible_type& data, schema_t& schema, const flex_date_time& input) {
  schema.insert(std::make_pair("type", JSON::types::DATETIME));
  flex_dict ret;

  int32_t time_zone_offset = input.time_zone_offset();
  ret.push_back(std::make_pair("posix_timestamp", input.posix_timestamp()));
  ret.push_back(std::make_pair("tz_15_min_offset",
    time_zone_offset == 64 ? FLEX_UNDEFINED : flexible_type(flex_int(time_zone_offset))));
  ret.push_back(std::make_pair("microsecond", input.microsecond()));

  data = ret;
}
 inline FLEX_ALWAYS_INLINE_FLATTEN void operator()(flex_date_time& t, const flex_float u) const {
   int64_t integral_part = std::floor(u);
   int64_t us_part = (u - integral_part) * flex_date_time::MICROSECONDS_PER_SECOND;
   t.set_posix_timestamp(t.posix_timestamp() - integral_part);
   auto microsecond = t.microsecond() - us_part;
   if (microsecond < 0) {
     t.set_posix_timestamp(t.posix_timestamp() - 1);
     microsecond += flex_date_time::MICROSECONDS_PER_SECOND;
   }
   t.set_microsecond(microsecond);
 }
 /// Equality comparator, timezone is checked
 inline bool identical(const flex_date_time& other) const{
   return posix_timestamp() == other.posix_timestamp() && 
       time_zone_offset() == other.time_zone_offset() &&
       microsecond() == other.microsecond();
 }
 /// Equality comparator, timezone is ignored.
 inline bool operator==(const flex_date_time& other) const{
   return 
       posix_timestamp() == other.posix_timestamp() && 
       microsecond() == other.microsecond();
 }
 inline FLEX_ALWAYS_INLINE_FLATTEN bool operator()(const flex_float t, const flex_date_time u) const { return t < u.microsecond_res_timestamp(); }
 inline FLEX_ALWAYS_INLINE_FLATTEN bool operator()(const flex_int t, const flex_date_time u) const { return t < u.posix_timestamp(); }
 inline FLEX_ALWAYS_INLINE_FLATTEN flex_float operator()(flex_date_time dt) const { 
   return dt.microsecond_res_timestamp();
 }
 inline FLEX_ALWAYS_INLINE_FLATTEN flex_int operator()(flex_date_time dt) const { 
   return dt.posix_timestamp();
 }
 inline FLEX_ALWAYS_INLINE_FLATTEN void operator()(flex_date_time& t, const flex_int u) const { t.set_posix_timestamp(t.posix_timestamp() - u); }
Ejemplo n.º 10
0
 inline FLEX_ALWAYS_INLINE_FLATTEN bool operator()(const flex_float t, const flex_date_time u) const { 
   return std::fabs(t - u.microsecond_res_timestamp()) < flex_date_time::MICROSECOND_EPSILON; 
 }
Ejemplo n.º 11
0
 inline FLEX_ALWAYS_INLINE_FLATTEN bool operator()(const flex_int t, const flex_date_time u) const { return t == u.posix_timestamp() && u.microsecond() == 0; }