Time: change internal time representation 33/146433/2
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Mon, 28 Aug 2017 11:04:52 +0000 (13:04 +0200)
committerLukasz Stanislawski <l.stanislaws@samsung.com>
Tue, 31 Oct 2017 10:47:54 +0000 (10:47 +0000)
Change internal time reperesentation from double to uint64_t.
The double type was chosen to be compatilbe with i18n library.
However, Clock use case requires frequent comprarisons of times up
to millisecond precision, which requires expensive floating point
operations to be made.

Change-Id: Ifdaa27f2c5c9675109fadabfe64705575f1ce3e8

clock/inc/Utils/Serialization.h
clock/inc/Utils/Time.h
clock/src/Utils/Time.cpp

index 3e950051fc49de713f8aa917a47606fa5ffc9168..768dcb4694ebc8f2a814aacbf19d5feb65492102 100644 (file)
@@ -111,6 +111,17 @@ namespace utils {
                r.Read(&v, sizeof(v));
        }
 
+       // uint64_t
+       inline void Serialize(IWriter &w, const uint64_t v) {
+               w.Write(&v, sizeof(v));
+       }
+       inline void Deserialize(IReader &r, uint64_t *v) {
+               r.Read(v, sizeof(uint64_t));
+       }
+       inline void Deserialize(IReader &r, uint64_t &v) {
+               r.Read(&v, sizeof(v));
+       }
+
        // serialization for std::string
        inline void Serialize(IWriter &w, const std::string &v) {
                int len = v.size();
index 5e36760a0b8e5f65cae83c4c6d5ca52e6fd097d7..683d52919eb237014b806d2fdaed33ef50673ce9 100644 (file)
@@ -25,6 +25,7 @@
 #include <map>
 #include <ctime>
 #include <utils_i18n.h>
+#include <cstdint>
 
 namespace utils {
        /**
@@ -273,10 +274,10 @@ namespace utils {
                        static double Difftime(const Time &end, const Time &start);
 
                private:
-                       Time(double milliseconds, const std::string &tz);
+                       Time(uint64_t milliseconds, const std::string &tz);
 
                        std::string timezone_;
-                       double milliseconds_;
+                       uint64_t milliseconds_;
 
                        static const char *GetLocale();
                        static std::map<std::string, std::string> best_patterns_cache;
index 84a398d03440d92910124bbe6e676d2edd753caf..ab223104287bb97cf8d89044bc7b36e3916bbe4e 100644 (file)
@@ -308,37 +308,37 @@ Time::Time(unsigned int year, Month month, unsigned int day,
 
 bool Time::operator==(const Time &a) const
 {
-       return floor(a.milliseconds_) == floor(milliseconds_);
+       return a.milliseconds_ == milliseconds_;
 }
 
 bool Time::operator>(const Time &a) const
 {
-       return floor(milliseconds_) > floor(a.milliseconds_);
+       return milliseconds_ > a.milliseconds_;
 }
 
 bool Time::operator<(const Time &a) const
 {
-       return floor(milliseconds_) < floor(a.milliseconds_);
+       return milliseconds_ < a.milliseconds_;
 }
 
 bool Time::operator>=(const Time &a) const
 {
-       return floor(milliseconds_) >= floor(a.milliseconds_);
+       return milliseconds_ >= a.milliseconds_;
 }
 
 bool Time::operator<=(const Time &a) const
 {
-       return floor(milliseconds_) <= floor(a.milliseconds_);
+       return milliseconds_ <= a.milliseconds_;
 }
 
 bool Time::operator!=(const Time &a) const
 {
-       return floor(milliseconds_) != floor(a.milliseconds_);
+       return milliseconds_ != a.milliseconds_;
 }
 
 double Time::Difftime(const Time &end, const Time &start)
 {
-       return floor(end.milliseconds_) - floor(start.milliseconds_);
+       return end.milliseconds_ - start.milliseconds_;
 }
 
 int Time::DateCompare(const Time &end, const Time &start)
@@ -411,7 +411,7 @@ const std::string& Time::GetCurrentTimezone()
        return timezone;
 }
 
-Time::Time(double milliseconds, const std::string &tz)
+Time::Time(uint64_t milliseconds, const std::string &tz)
 {
        timezone_ = tz;
        milliseconds_ = milliseconds;
@@ -429,7 +429,7 @@ std::string Time::GetTimezoneNameByOffset(int offset)
        return std::string(buf);
 }
 
-static int GetCalendarField(double milliseconds, const char *zone, const char *locale,
+static int GetCalendarField(uint64_t milliseconds, const char *zone, const char *locale,
                i18n_ucalendar_date_fields_e field)
 {
        i18n_ucalendar_h calendar;