1 /* 2 * This file is part of gtkD. 3 * 4 * gtkD is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License 6 * as published by the Free Software Foundation; either version 3 7 * of the License, or (at your option) any later version, with 8 * some exceptions, please read the COPYING file. 9 * 10 * gtkD is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with gtkD; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA 18 */ 19 20 // generated automatically - do not change 21 // find conversion definition on APILookup.txt 22 // implement new conversion functionalities on the wrap.utils pakage 23 24 25 module glib.TimeVal; 26 27 private import glib.MemorySlice; 28 private import glib.Str; 29 private import glib.c.functions; 30 public import glib.c.types; 31 public import gtkc.glibtypes; 32 private import gtkd.Loader; 33 34 35 /** 36 * Represents a precise time, with seconds and microseconds. 37 * Similar to the struct timeval returned by the gettimeofday() 38 * UNIX system call. 39 * 40 * GLib is attempting to unify around the use of 64-bit integers to 41 * represent microsecond-precision time. As such, this type will be 42 * removed from a future version of GLib. A consequence of using `glong` for 43 * `tv_sec` is that on 32-bit systems `GTimeVal` is subject to the year 2038 44 * problem. 45 * 46 * Deprecated: Use #GDateTime or #guint64 instead. 47 */ 48 public final class TimeVal 49 { 50 /** the main Gtk struct */ 51 protected GTimeVal* gTimeVal; 52 protected bool ownedRef; 53 54 /** Get the main Gtk struct */ 55 public GTimeVal* getTimeValStruct(bool transferOwnership = false) 56 { 57 if (transferOwnership) 58 ownedRef = false; 59 return gTimeVal; 60 } 61 62 /** the main Gtk struct as a void* */ 63 protected void* getStruct() 64 { 65 return cast(void*)gTimeVal; 66 } 67 68 /** 69 * Sets our main struct and passes it to the parent class. 70 */ 71 public this (GTimeVal* gTimeVal, bool ownedRef = false) 72 { 73 this.gTimeVal = gTimeVal; 74 this.ownedRef = ownedRef; 75 } 76 77 ~this () 78 { 79 if ( Linker.isLoaded(LIBRARY_GLIB) && ownedRef ) 80 sliceFree(gTimeVal); 81 } 82 83 84 /** 85 * seconds 86 */ 87 public @property glong tvSec() 88 { 89 return gTimeVal.tvSec; 90 } 91 92 /** Ditto */ 93 public @property void tvSec(glong value) 94 { 95 gTimeVal.tvSec = value; 96 } 97 98 /** 99 * microseconds 100 */ 101 public @property glong tvUsec() 102 { 103 return gTimeVal.tvUsec; 104 } 105 106 /** Ditto */ 107 public @property void tvUsec(glong value) 108 { 109 gTimeVal.tvUsec = value; 110 } 111 112 /** 113 * Adds the given number of microseconds to @time_. @microseconds can 114 * also be negative to decrease the value of @time_. 115 * 116 * Deprecated: #GTimeVal is not year-2038-safe. Use `guint64` for 117 * representing microseconds since the epoch, or use #GDateTime. 118 * 119 * Params: 120 * microseconds = number of microseconds to add to @time 121 */ 122 public void add(glong microseconds) 123 { 124 g_time_val_add(gTimeVal, microseconds); 125 } 126 127 /** 128 * Converts @time_ into an RFC 3339 encoded string, relative to the 129 * Coordinated Universal Time (UTC). This is one of the many formats 130 * allowed by ISO 8601. 131 * 132 * ISO 8601 allows a large number of date/time formats, with or without 133 * punctuation and optional elements. The format returned by this function 134 * is a complete date and time, with optional punctuation included, the 135 * UTC time zone represented as "Z", and the @tv_usec part included if 136 * and only if it is nonzero, i.e. either 137 * "YYYY-MM-DDTHH:MM:SSZ" or "YYYY-MM-DDTHH:MM:SS.fffffZ". 138 * 139 * This corresponds to the Internet date/time format defined by 140 * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt), 141 * and to either of the two most-precise formats defined by 142 * the W3C Note 143 * [Date and Time Formats](http://www.w3.org/TR/NOTE-datetime-19980827). 144 * Both of these documents are profiles of ISO 8601. 145 * 146 * Use g_date_time_format() or g_strdup_printf() if a different 147 * variation of ISO 8601 format is required. 148 * 149 * If @time_ represents a date which is too large to fit into a `struct tm`, 150 * %NULL will be returned. This is platform dependent. Note also that since 151 * `GTimeVal` stores the number of seconds as a `glong`, on 32-bit systems it 152 * is subject to the year 2038 problem. Accordingly, since GLib 2.62, this 153 * function has been deprecated. Equivalent functionality is available using: 154 * |[ 155 * GDateTime *dt = g_date_time_new_from_unix_utc (time_val); 156 * iso8601_string = g_date_time_format_iso8601 (dt); 157 * g_date_time_unref (dt); 158 * ]| 159 * 160 * The return value of g_time_val_to_iso8601() has been nullable since GLib 161 * 2.54; before then, GLib would crash under the same conditions. 162 * 163 * Deprecated: #GTimeVal is not year-2038-safe. Use 164 * g_date_time_format_iso8601(dt) instead. 165 * 166 * Returns: a newly allocated string containing an ISO 8601 date, 167 * or %NULL if @time_ was too large 168 * 169 * Since: 2.12 170 */ 171 public string toIso8601() 172 { 173 auto retStr = g_time_val_to_iso8601(gTimeVal); 174 175 scope(exit) Str.freeString(retStr); 176 return Str.toString(retStr); 177 } 178 179 /** 180 * Converts a string containing an ISO 8601 encoded date and time 181 * to a #GTimeVal and puts it into @time_. 182 * 183 * @iso_date must include year, month, day, hours, minutes, and 184 * seconds. It can optionally include fractions of a second and a time 185 * zone indicator. (In the absence of any time zone indication, the 186 * timestamp is assumed to be in local time.) 187 * 188 * Any leading or trailing space in @iso_date is ignored. 189 * 190 * This function was deprecated, along with #GTimeVal itself, in GLib 2.62. 191 * Equivalent functionality is available using code like: 192 * |[ 193 * GDateTime *dt = g_date_time_new_from_iso8601 (iso8601_string, NULL); 194 * gint64 time_val = g_date_time_to_unix (dt); 195 * g_date_time_unref (dt); 196 * ]| 197 * 198 * Deprecated: #GTimeVal is not year-2038-safe. Use 199 * g_date_time_new_from_iso8601() instead. 200 * 201 * Params: 202 * isoDate = an ISO 8601 encoded date string 203 * time = a #GTimeVal 204 * 205 * Returns: %TRUE if the conversion was successful. 206 * 207 * Since: 2.12 208 */ 209 public static bool fromIso8601(string isoDate, out TimeVal time) 210 { 211 GTimeVal* outtime = sliceNew!GTimeVal(); 212 213 auto __p = g_time_val_from_iso8601(Str.toStringz(isoDate), outtime) != 0; 214 215 time = new TimeVal(outtime, true); 216 217 return __p; 218 } 219 220 /** 221 * Equivalent to the UNIX gettimeofday() function, but portable. 222 * 223 * You may find g_get_real_time() to be more convenient. 224 * 225 * Deprecated: #GTimeVal is not year-2038-safe. Use g_get_real_time() 226 * instead. 227 * 228 * Params: 229 * result = #GTimeVal structure in which to store current time. 230 */ 231 public static void getCurrentTime(TimeVal result) 232 { 233 g_get_current_time((result is null) ? null : result.getTimeValStruct()); 234 } 235 236 /** 237 * Queries the system monotonic time. 238 * 239 * The monotonic clock will always increase and doesn't suffer 240 * discontinuities when the user (or NTP) changes the system time. It 241 * may or may not continue to tick during times where the machine is 242 * suspended. 243 * 244 * We try to use the clock that corresponds as closely as possible to 245 * the passage of time as measured by system calls such as poll() but it 246 * may not always be possible to do this. 247 * 248 * Returns: the monotonic time, in microseconds 249 * 250 * Since: 2.28 251 */ 252 public static long getMonotonicTime() 253 { 254 return g_get_monotonic_time(); 255 } 256 257 /** 258 * Queries the system wall-clock time. 259 * 260 * This call is functionally equivalent to g_get_current_time() except 261 * that the return value is often more convenient than dealing with a 262 * #GTimeVal. 263 * 264 * You should only use this call if you are actually interested in the real 265 * wall-clock time. g_get_monotonic_time() is probably more useful for 266 * measuring intervals. 267 * 268 * Returns: the number of microseconds since January 1, 1970 UTC. 269 * 270 * Since: 2.28 271 */ 272 public static long getRealTime() 273 { 274 return g_get_real_time(); 275 } 276 277 /** 278 * Pauses the current thread for the given number of microseconds. 279 * 280 * There are 1 million microseconds per second (represented by the 281 * #G_USEC_PER_SEC macro). g_usleep() may have limited precision, 282 * depending on hardware and operating system; don't rely on the exact 283 * length of the sleep. 284 * 285 * Params: 286 * microseconds = number of microseconds to pause 287 */ 288 public static void usleep(gulong microseconds) 289 { 290 g_usleep(microseconds); 291 } 292 }