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.Str;
28 private import gtkc.glib;
29 public  import gtkc.glibtypes;
30 
31 
32 /**
33  * Represents a precise time, with seconds and microseconds.
34  * Similar to the struct timeval returned by the gettimeofday()
35  * UNIX system call.
36  * 
37  * GLib is attempting to unify around the use of 64bit integers to
38  * represent microsecond-precision time. As such, this type will be
39  * removed from a future version of GLib.
40  */
41 public class TimeVal
42 {
43 	/** the main Gtk struct */
44 	protected GTimeVal* gTimeVal;
45 	protected bool ownedRef;
46 
47 	/** Get the main Gtk struct */
48 	public GTimeVal* getTimeValStruct()
49 	{
50 		return gTimeVal;
51 	}
52 
53 	/** the main Gtk struct as a void* */
54 	protected void* getStruct()
55 	{
56 		return cast(void*)gTimeVal;
57 	}
58 
59 	/**
60 	 * Sets our main struct and passes it to the parent class.
61 	 */
62 	public this (GTimeVal* gTimeVal, bool ownedRef = false)
63 	{
64 		this.gTimeVal = gTimeVal;
65 		this.ownedRef = ownedRef;
66 	}
67 
68 
69 	/**
70 	 * Adds the given number of microseconds to @time_. @microseconds can
71 	 * also be negative to decrease the value of @time_.
72 	 *
73 	 * Params:
74 	 *     microseconds = number of microseconds to add to @time
75 	 */
76 	public void add(glong microseconds)
77 	{
78 		g_time_val_add(gTimeVal, microseconds);
79 	}
80 
81 	/**
82 	 * Converts @time_ into an RFC 3339 encoded string, relative to the
83 	 * Coordinated Universal Time (UTC). This is one of the many formats
84 	 * allowed by ISO 8601.
85 	 *
86 	 * ISO 8601 allows a large number of date/time formats, with or without
87 	 * punctuation and optional elements. The format returned by this function
88 	 * is a complete date and time, with optional punctuation included, the
89 	 * UTC time zone represented as "Z", and the @tv_usec part included if
90 	 * and only if it is nonzero, i.e. either
91 	 * "YYYY-MM-DDTHH:MM:SSZ" or "YYYY-MM-DDTHH:MM:SS.fffffZ".
92 	 *
93 	 * This corresponds to the Internet date/time format defined by
94 	 * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt),
95 	 * and to either of the two most-precise formats defined by
96 	 * the W3C Note
97 	 * [Date and Time Formats](http://www.w3.org/TR/NOTE-datetime-19980827).
98 	 * Both of these documents are profiles of ISO 8601.
99 	 *
100 	 * Use g_date_time_format() or g_strdup_printf() if a different
101 	 * variation of ISO 8601 format is required.
102 	 *
103 	 * Return: a newly allocated string containing an ISO 8601 date
104 	 *
105 	 * Since: 2.12
106 	 */
107 	public string toIso8601()
108 	{
109 		auto retStr = g_time_val_to_iso8601(gTimeVal);
110 		
111 		scope(exit) Str.freeString(retStr);
112 		return Str.toString(retStr);
113 	}
114 
115 	/**
116 	 * Converts a string containing an ISO 8601 encoded date and time
117 	 * to a #GTimeVal and puts it into @time_.
118 	 *
119 	 * @iso_date must include year, month, day, hours, minutes, and
120 	 * seconds. It can optionally include fractions of a second and a time
121 	 * zone indicator. (In the absence of any time zone indication, the
122 	 * timestamp is assumed to be in local time.)
123 	 *
124 	 * Params:
125 	 *     isoDate = an ISO 8601 encoded date string
126 	 *     time = a #GTimeVal
127 	 *
128 	 * Return: %TRUE if the conversion was successful.
129 	 *
130 	 * Since: 2.12
131 	 */
132 	public static bool fromIso8601(string isoDate, out TimeVal time)
133 	{
134 		GTimeVal* outtime = gMalloc!GTimeVal();
135 		
136 		auto p = g_time_val_from_iso8601(Str.toStringz(isoDate), outtime) != 0;
137 		
138 		time = new TimeVal(outtime, true);
139 		
140 		return p;
141 	}
142 
143 	/**
144 	 * Equivalent to the UNIX gettimeofday() function, but portable.
145 	 *
146 	 * You may find g_get_real_time() to be more convenient.
147 	 *
148 	 * Params:
149 	 *     result = #GTimeVal structure in which to store current time.
150 	 */
151 	public static void getCurrentTime(TimeVal result)
152 	{
153 		g_get_current_time((result is null) ? null : result.getTimeValStruct());
154 	}
155 
156 	/**
157 	 * Queries the system monotonic time.
158 	 *
159 	 * The monotonic clock will always increase and doesn't suffer
160 	 * discontinuities when the user (or NTP) changes the system time.  It
161 	 * may or may not continue to tick during times where the machine is
162 	 * suspended.
163 	 *
164 	 * We try to use the clock that corresponds as closely as possible to
165 	 * the passage of time as measured by system calls such as poll() but it
166 	 * may not always be possible to do this.
167 	 *
168 	 * Return: the monotonic time, in microseconds
169 	 *
170 	 * Since: 2.28
171 	 */
172 	public static long getMonotonicTime()
173 	{
174 		return g_get_monotonic_time();
175 	}
176 
177 	/**
178 	 * Queries the system wall-clock time.
179 	 *
180 	 * This call is functionally equivalent to g_get_current_time() except
181 	 * that the return value is often more convenient than dealing with a
182 	 * #GTimeVal.
183 	 *
184 	 * You should only use this call if you are actually interested in the real
185 	 * wall-clock time.  g_get_monotonic_time() is probably more useful for
186 	 * measuring intervals.
187 	 *
188 	 * Return: the number of microseconds since January 1, 1970 UTC.
189 	 *
190 	 * Since: 2.28
191 	 */
192 	public static long getRealTime()
193 	{
194 		return g_get_real_time();
195 	}
196 
197 	/**
198 	 * Pauses the current thread for the given number of microseconds.
199 	 *
200 	 * There are 1 million microseconds per second (represented by the
201 	 * #G_USEC_PER_SEC macro). g_usleep() may have limited precision,
202 	 * depending on hardware and operating system; don't rely on the exact
203 	 * length of the sleep.
204 	 *
205 	 * Params:
206 	 *     microseconds = number of microseconds to pause
207 	 */
208 	public static void usleep(gulong microseconds)
209 	{
210 		g_usleep(microseconds);
211 	}
212 }