The following commit has been merged in the master branch:
commit 51249108e0bee116897006c59f4a74920f5895a9
Author: Andrei Zavada <[email protected]>
Date:   Sun Jan 6 03:00:52 2013 +0200

    new functions agh::str::dhms(double seconds)

diff --git a/src/common/libcommon.cc b/src/common/libcommon.cc
index b7a1bed..4cc8d26 100644
--- a/src/common/libcommon.cc
+++ b/src/common/libcommon.cc
@@ -11,6 +11,7 @@
  */
 
 
+#include <cstdio>
 #include <cstring>
 #include <string>
 #include <list>
@@ -142,6 +143,71 @@ tilda2homedir( const string& v)
 
 
 
+string
+agh::str::
+dhms( double seconds, int dd)
+{
+       bool    positive = seconds >= 0.;
+       if ( not positive )
+               seconds = -seconds;
+
+       int     s = (int)seconds % 60,
+               m = (int)seconds/60 % 60,
+               h = (int)seconds/60/60 % (60*60),
+               d = (int)seconds/60/60/24 % (60*60*24);
+       double  f = seconds - floor(seconds);
+
+       DEF_UNIQUE_CHARP (f_);
+       if ( dd == 0 )
+               f_ = strdup( "");
+       else
+               ASPRINTF( &f_, ".%0*d", dd, (int)(f*pow(10, dd)));
+
+       DEF_UNIQUE_CHARP (_);
+
+       if ( d > 0 )
+               ASPRINTF( &_, "%dd %dh %dm %d%ss", d, h, m, s, f_);
+       else if ( h > 0 )
+               ASPRINTF( &_, "%dh %dm %d%ss", h, m, s, f_);
+       else if ( m > 0 )
+               ASPRINTF( &_, "%dm %d%ss", m, s, f_);
+       else
+               ASPRINTF( &_, "%d%ss", s, f_);
+
+       string ret (_);
+       return ret;
+}
+
+string
+agh::str::
+dhms_colon( double seconds, int dd)
+{
+       bool    positive = seconds >= 0.;
+       if ( not positive )
+               seconds = -seconds;
+
+       int     s = (int)seconds % 60,
+               m = (int)seconds/60 % 60,
+               h = (int)seconds/60/60 % (60*60),
+               d = (int)seconds/60/60/24 % (60*60*24);
+       double  f = seconds - floor(seconds);
+
+       DEF_UNIQUE_CHARP (f_);
+       if ( dd == 0 )
+               f_ = strdup( "");
+       else
+               ASPRINTF( &f_, ".%0*d", dd, (int)(f*pow(10, dd)));
+
+       DEF_UNIQUE_CHARP (_);
+
+       ASPRINTF( &_, "%dd %02d:%02d:%02d%ss", d, h, m, s, f_);
+
+       string ret (_);
+       return ret;
+}
+
+
+
 
 
 
diff --git a/src/common/string.hh b/src/common/string.hh
index a5d58e1..7b604ae 100644
--- a/src/common/string.hh
+++ b/src/common/string.hh
@@ -56,6 +56,9 @@ string  homedir2tilda( const string& v);
 string& tilda2homedir( string& inplace);
 string  tilda2homedir( const string& v);
 
+string dhms( double seconds, int decimal_digits = 0) __attribute__ ((pure));
+string dhms_colon( double seconds, int decimal_digits = 0) __attribute__ 
((pure));
+
 }
 }
 

-- 
Sleep experiment manager

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to