10 # if !defined(HPP_ALIB_SYSTEM_SYSTEM)
13 # if !defined (HPP_ALIB_FS_MODULES_DISTRIBUTION)
16 # if !defined (HPP_ALIB_STRINGS_NUMBERFORMAT)
19 # if !defined (HPP_ALIB_STRINGS_FORMAT)
22 # if !defined (HPP_ALIB_STRINGS_SUBSTRING)
25 # if !defined(HPP_ALIB_TIME_TIME)
28 # if !defined (HPP_ALIB_RESOURCES_RESOURCES)
31 # if !defined (HPP_ALIB_RESULTS_RESULTS)
34 # if !defined (HPP_ALIB_SYSTEM_DIRECTORY)
37 # if !defined (HPP_ALIB_SYSTEM_CALENDAR)
40 # if !defined (HPP_ALIB_ENUMS_RECORDBOOTSTRAP)
43 # if !defined(HPP_ALIB_ENUMS_SERIALIZATION)
46 #if !defined(HPP_ALIB_TEXT_FWDS)
49 #endif // !defined(ALIB_DOX)
56 namespace aworx {
namespace lib {
63 #if !defined(ALIB_DOX)
86 NSecSingular, SIZE_OF_UNITS
89 String units[SIZE_OF_UNITS];
92 #endif // defined(ALIB_DOX)
98 "Instances of class System must not be created. Use singleton aworx::lib::SYSTEM" )
113 #if !ALIB_RESOURCES_OMIT_DEFAULTS
117 "Months" ,
A_CHAR(
"January,February,March,April,May,June,July,August,September,October,November,December")
118 ,
"Days" ,
A_CHAR(
"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,") EOS
120 "DurUnts" ,
A_CHAR(
"zero time" ","
136 "DFMT",
A_CHAR(
"yyyy-MM-dd HH:mm:ss"),
140 "E",
A_CHAR(
"0,OK" ",NON" ) EOS
142 "SpecialFolder",
A_CHAR(
"0,Root" ",1,"
148 "6,VarTemp" ",1" ) EOS
152 #
if defined (__GLIBC__) || defined(__APPLE__)
153 "SE<" ,
A_CHAR(
"glibc::" ),
154 "OSERR" ,
A_CHAR(
"GNU-C Library call returned {!Q} ({})."),
155 "UknSE" ,
A_CHAR(
"GNU-C Library call returned ({}). (Unknown error number)"),
156 #elif defined(_WIN32)
157 "SE<" ,
A_CHAR(
"WindowsOS::" ),
158 "OSERR" ,
A_CHAR(
"Windows system call returned {!Q} ({})."),
159 "UknSE" ,
A_CHAR(
"Windows system call returned ({}). (Unknown error number)"),
163 A_CHAR(
"-1" "," "UNKNOWN" "," "UknSE" "," )
164 A_CHAR(
"0" "," "OK" "," "," )
166 #
if defined (__GLIBC__) || defined(__APPLE__) || defined(__ANDROID_NDK__)
167 A_CHAR(
"1" "," "EPERM" "," "OSERR" ","
168 "2" "," "ENOENT" "," "OSERR" ","
169 "3" "," "ESRCH" "," "OSERR" ","
170 "4" "," "EINTR" "," "OSERR" ","
171 "5" "," "EIO" "," "OSERR" ","
172 "6" "," "ENXIO" "," "OSERR" ","
173 "7" "," "E2BIG" "," "OSERR" ","
174 "8" "," "ENOEXEC" "," "OSERR" ","
175 "9" "," "EBADF" "," "OSERR" ","
176 "10" "," "ECHILD" "," "OSERR" ","
177 "11" "," "EAGAIN" "," "OSERR" ","
178 "12" "," "ENOMEM" "," "OSERR" ","
179 "13" "," "EACCES" "," "OSERR" ","
180 "14" "," "EFAULT" "," "OSERR" ","
181 "15" "," "ENOTBLK" "," "OSERR" ","
182 "16" "," "EBUSY" "," "OSERR" ","
183 "17" "," "EEXIST" "," "OSERR" ","
184 "18" "," "EXDEV" "," "OSERR" ","
185 "19" "," "ENODEV" "," "OSERR" ","
186 "20" "," "ENOTDIR" "," "OSERR" ","
187 "21" "," "EISDIR" "," "OSERR" ","
188 "22" "," "EINVAL" "," "OSERR" ","
189 "23" "," "ENFILE" "," "OSERR" ","
190 "24" "," "EMFILE" "," "OSERR" ","
191 "25" "," "ENOTTY" "," "OSERR" ","
192 "26" "," "ETXTBSY" "," "OSERR" ","
193 "27" "," "EFBIG" "," "OSERR" ","
194 "28" "," "ENOSPC" "," "OSERR" ","
195 "29" "," "ESPIPE" "," "OSERR" ","
196 "30" "," "EROFS" "," "OSERR" ","
197 "31" "," "EMLINK" "," "OSERR" ","
198 "32" "," "EPIPE" "," "OSERR" ","
199 "33" "," "EDOM" "," "OSERR" ","
200 "34" "," "ERANGE" "," "OSERR" ","
201 "35" "," "EDEADLK" "," "OSERR" ","
202 "36" "," "ENAMETOOLONG" "," "OSERR" ","
203 "37" "," "ENOLCK" "," "OSERR" ","
204 "38" "," "ENOSYS" "," "OSERR" ","
205 "39" "," "ENOTEMPTY" "," "OSERR" ","
206 "40" "," "ELOOP" "," "OSERR" ","
207 "42" "," "ENOMSG" "," "OSERR" ","
208 "43" "," "EIDRM" "," "OSERR" "," )
209 #
if !defined(__APPLE__)
210 A_CHAR(
"44" "," "ECHRNG" "," "OSERR" ","
211 "45" "," "EL2NSYNC" "," "OSERR" ","
212 "46" "," "EL3HLT" "," "OSERR" ","
213 "47" "," "EL3RST" "," "OSERR" ","
214 "48" "," "ELNRNG" "," "OSERR" ","
215 "49" "," "EUNATCH" "," "OSERR" ","
216 "50" "," "ENOCSI" "," "OSERR" ","
217 "51" "," "EL2HLT" "," "OSERR" ","
218 "52" "," "EBADE" "," "OSERR" ","
219 "53" "," "EBADR" "," "OSERR" ","
220 "54" "," "EXFULL" "," "OSERR" ","
221 "55" "," "ENOANO" "," "OSERR" ","
222 "56" "," "EBADRQC" "," "OSERR" ","
223 "57" "," "EBADSLT" "," "OSERR" ","
224 "59" "," "EBFONT" "," "OSERR" ",")
226 A_CHAR(
"60" "," "ENOSTR" "," "OSERR" ","
227 "61" "," "ENODATA" "," "OSERR" ","
228 "62" "," "ETIME" "," "OSERR" ","
229 "63" "," "ENOSR" "," "OSERR" ",")
230 #
if !defined(__APPLE__)
231 A_CHAR(
"64" "," "ENONET" "," "OSERR" ","
232 "65" "," "ENOPKG" "," "OSERR" ",")
234 A_CHAR(
"66" "," "EREMOTE" "," "OSERR" ","
235 "67" "," "ENOLINK" "," "OSERR" ",")
236 #
if !defined(__APPLE__)
237 A_CHAR(
"68" "," "EADV" "," "OSERR" ","
238 "69" "," "ESRMNT" "," "OSERR" ","
239 "70" "," "ECOMM" "," "OSERR" ",")
241 A_CHAR(
"71" "," "EPROTO" "," "OSERR" ","
242 "72" "," "EMULTIHOP" "," "OSERR" ",")
243 #
if !defined(__APPLE__)
244 A_CHAR(
"73" "," "EDOTDOT" "," "OSERR" ",")
246 A_CHAR(
"74" "," "EBADMSG" "," "OSERR" ","
247 "75" "," "EOVERFLOW" "," "OSERR" ",")
248 #
if !defined(__APPLE__)
249 A_CHAR(
"76" "," "ENOTUNIQ" "," "OSERR" ","
250 "77" "," "EBADFD" "," "OSERR" ","
251 "78" "," "EREMCHG" "," "OSERR" ","
252 "79" "," "ELIBACC" "," "OSERR" ","
253 "80" "," "ELIBBAD" "," "OSERR" ","
254 "81" "," "ELIBSCN" "," "OSERR" ","
255 "82" "," "ELIBMAX" "," "OSERR" ","
256 "83" "," "ELIBEXEC" "," "OSERR" ",")
258 A_CHAR(
"84" "," "EILSEQ" "," "OSERR" ",")
259 #
if !defined(__APPLE__)
260 A_CHAR(
"85" "," "ERESTART" "," "OSERR" ","
261 "86" "," "ESTRPIPE" "," "OSERR" ",")
263 A_CHAR(
"87" "," "EUSERS" "," "OSERR" ","
264 "88" "," "ENOTSOCK" "," "OSERR" ","
265 "89" "," "EDESTADDRREQ" "," "OSERR" ","
266 "90" "," "EMSGSIZE" "," "OSERR" ","
267 "91" "," "EPROTOTYPE" "," "OSERR" ","
268 "92" "," "ENOPROTOOPT" "," "OSERR" ","
269 "93" "," "EPROTONOSUPPORT" "," "OSERR" ","
270 "94" "," "ESOCKTNOSUPPORT" "," "OSERR" ","
271 "95" "," "EOPNOTSUPP" "," "OSERR" ","
272 "96" "," "EPFNOSUPPORT" "," "OSERR" ","
273 "97" "," "EAFNOSUPPORT" "," "OSERR" ","
274 "98" "," "EADDRINUSE" "," "OSERR" ","
275 "99" "," "EADDRNOTAVAIL" "," "OSERR" ","
276 "100" "," "ENETDOWN" "," "OSERR" ","
277 "101" "," "ENETUNREACH" "," "OSERR" ","
278 "102" "," "ENETRESET" "," "OSERR" ","
279 "103" "," "ECONNABORTED" "," "OSERR" ","
280 "104" "," "ECONNRESET" "," "OSERR" ","
281 "105" "," "ENOBUFS" "," "OSERR" ","
282 "106" "," "EISCONN" "," "OSERR" ","
283 "107" "," "ENOTCONN" "," "OSERR" ","
284 "108" "," "ESHUTDOWN" "," "OSERR" ","
285 "109" "," "ETOOMANYREFS" "," "OSERR" ","
286 "110" "," "ETIMEDOUT" "," "OSERR" ","
287 "111" "," "ECONNREFUSED" "," "OSERR" ","
288 "112" "," "EHOSTDOWN" "," "OSERR" ","
289 "113" "," "EHOSTUNREACH" "," "OSERR" ","
290 "114" "," "EALREADY" "," "OSERR" ","
291 "115" "," "EINPROGRESS" "," "OSERR" ","
292 "116" "," "ESTALE" "," "OSERR" "," )
293 #
if !defined(__APPLE__)
294 A_CHAR(
"117" "," "EUCLEAN" "," "OSERR" ","
295 "118" "," "ENOTNAM" "," "OSERR" ","
296 "119" "," "ENAVAIL" "," "OSERR" ","
297 "120" "," "EISNAM" "," "OSERR" ","
298 "121" "," "EREMOTEIO" "," "OSERR" "," )
300 A_CHAR(
"122" "," "EDQUOT" "," "OSERR" "," )
301 #
if !defined(__APPLE__)
302 A_CHAR(
"123" "," "ENOMEDIUM" "," "OSERR" ","
303 "124" "," "EMEDIUMTYPE" "," "OSERR" "," )
305 A_CHAR(
"125" "," "ECANCELED" "," "OSERR" "," )
306 #
if !defined(__APPLE__)
307 A_CHAR(
"126" "," "ENOKEY" "," "OSERR" ","
308 "127" "," "EKEYEXPIRED" "," "OSERR" ","
309 "128" "," "EKEYREVOKED" "," "OSERR" ","
310 "129" "," "EKEYREJECTED" "," "OSERR" "," )
312 A_CHAR(
"130" "," "EOWNERDEAD" "," "OSERR" ","
313 "131" "," "ENOTRECOVERABLE" "," "OSERR" )
314 #
if !defined(__APPLE__)
316 "132" "," "ERFKILL" "," "OSERR" ","
317 "133" "," "EHWPOISON" "," "OSERR" )
321 #elif defined(_WIN32)
322 A_CHAR(
"1" "," "EPERM" "," "OSERR" ","
323 "2" "," "ENOENT" "," "OSERR" ","
324 "3" "," "ESRCH" "," "OSERR" ","
325 "4" "," "EINTR" "," "OSERR" ","
326 "5" "," "EIO" "," "OSERR" ","
327 "6" "," "ENXIO" "," "OSERR" ","
328 "7" "," "E2BIG" "," "OSERR" ","
329 "8" "," "ENOEXEC" "," "OSERR" ","
330 "9" "," "EBADF" "," "OSERR" ","
331 "10" "," "ECHILD" "," "OSERR" ","
332 "11" "," "EAGAIN" "," "OSERR" ","
333 "12" "," "ENOMEM" "," "OSERR" ","
334 "13" "," "EACCES" "," "OSERR" ","
335 "14" "," "EFAULT" "," "OSERR" ","
336 "16" "," "EBUSY" "," "OSERR" ","
337 "17" "," "EEXIST" "," "OSERR" ","
338 "18" "," "EXDEV" "," "OSERR" ","
339 "19" "," "ENODEV" "," "OSERR" ","
340 "20" "," "ENOTDIR" "," "OSERR" ","
341 "21" "," "EISDIR" "," "OSERR" ","
342 "23" "," "ENFILE" "," "OSERR" ","
343 "24" "," "EMFILE" "," "OSERR" ","
344 "25" "," "ENOTTY" "," "OSERR" ","
345 "27" "," "EFBIG" "," "OSERR" ","
346 "28" "," "ENOSPC" "," "OSERR" ","
347 "29" "," "ESPIPE" "," "OSERR" ","
348 "30" "," "EROFS" "," "OSERR" ","
349 "31" "," "EMLINK" "," "OSERR" ","
350 "32" "," "EPIPE" "," "OSERR" ","
351 "33" "," "EDOM" "," "OSERR" ","
352 "36" "," "EDEADLK" "," "OSERR" ","
353 "38" "," "ENAMETOOLONG" "," "OSERR" ","
354 "39" "," "ENOLCK" "," "OSERR" ","
355 "40" "," "ENOSYS" "," "OSERR" ","
356 "41" "," "ENOTEMPTY" "," "OSERR" ","
357 "22" "," "EINVAL" "," "OSERR" ","
358 "34" "," "ERANGE" "," "OSERR" ","
359 "42" "," "EILSEQ" "," "OSERR" ","
360 "80" "," "STRUNCATE" "," "OSERR" ","
361 "100" "," "EADDRINUSE" "," "OSERR" ","
362 "101" "," "EADDRNOTAVAIL" "," "OSERR" ","
363 "102" "," "EAFNOSUPPORT" "," "OSERR" ","
364 "103" "," "EALREADY" "," "OSERR" ","
365 "104" "," "EBADMSG" "," "OSERR" ","
366 "105" "," "ECANCELED" "," "OSERR" ","
367 "106" "," "ECONNABORTED" "," "OSERR" ","
368 "107" "," "ECONNREFUSED" "," "OSERR" ","
369 "108" "," "ECONNRESET" "," "OSERR" ","
370 "109" "," "EDESTADDRREQ" "," "OSERR" ","
371 "110" "," "EHOSTUNREACH" "," "OSERR" ","
372 "111" "," "EIDRM" "," "OSERR" ","
373 "112" "," "EINPROGRESS" "," "OSERR" ","
374 "113" "," "EISCONN" "," "OSERR" ","
375 "114" "," "ELOOP" "," "OSERR" ","
376 "115" "," "EMSGSIZE" "," "OSERR" ","
377 "116" "," "ENETDOWN" "," "OSERR" ","
378 "117" "," "ENETRESET" "," "OSERR" ","
379 "118" "," "ENETUNREACH" "," "OSERR" ","
380 "119" "," "ENOBUFS" "," "OSERR" ","
381 "120" "," "ENODATA" "," "OSERR" ","
382 "121" "," "ENOLINK" "," "OSERR" ","
383 "122" "," "ENOMSG" "," "OSERR" ","
384 "123" "," "ENOPROTOOPT" "," "OSERR" ","
385 "124" "," "ENOSR" "," "OSERR" ","
386 "125" "," "ENOSTR" "," "OSERR" ","
387 "126" "," "ENOTCONN" "," "OSERR" ","
388 "127" "," "ENOTRECOVERABLE" "," "OSERR" ","
389 "128" "," "ENOTSOCK" "," "OSERR" ","
390 "129" "," "ENOTSUP" "," "OSERR" ","
391 "130" "," "EOPNOTSUPP" "," "OSERR" ","
392 "131" "," "EOTHER" "," "OSERR" ","
393 "132" "," "EOVERFLOW" "," "OSERR" ","
394 "133" "," "EOWNERDEAD" "," "OSERR" ","
395 "134" "," "EPROTO" "," "OSERR" ","
396 "135" "," "EPROTONOSUPPORT" "," "OSERR" ","
397 "136" "," "EPROTOTYPE" "," "OSERR" ","
398 "137" "," "ETIME" "," "OSERR" ","
399 "138" "," "ETIMEDOUT" "," "OSERR" ","
400 "139" "," "ETXTBSY" "," "OSERR" ","
401 "140" "," "EWOULDBLOCK" "," "OSERR" ) EOS
408 #endif // !ALIB_RESOURCES_OMIT_DEFAULTS
414 lib::boxing::BootstrapRegister<text::FFormat, lib::boxing::TMappedTo<time::DateTime>>(
FFormat_DateTime);
439 for(
int i= 0 ; i < Units::SIZE_OF_UNITS ; ++i )
442 ALIB_ASSERT( units[Units::SIZE_OF_UNITS-1].IsNotEmpty() )
450 if( enumRecord ==
nullptr )
499 ALIB_WARNING(
"SYSTEM",
"Format Error: Missing single Quote" )
500 target <<
"Format Error: Missing single Quote" ;
504 target.
_<
false>( format, 0, end );
520 target.
_<
false>(
Hour < 12 ?
" am" :
" pm" );
529 else if ( n == 3 ) target.
_<
false>( days[
DayOfWeek], 0, 3 );
535 else if ( n == 3 ) target.
_<
false>( months[
Month-1], 0, 3 );
536 else target.
_<
false>( months[
Month-1] );
560 #if !defined(ALIB_DOX)
561 DOX_MARKER([DOX_ALIB_BOXING_IFORMAT_DATETIME])
565 tct.Format( formatSpec.
IsNotEmpty() ? formatSpec
569 DOX_MARKER([DOX_ALIB_BOXING_IFORMAT_DATETIME])
576 #if !defined(ALIB_DOX)
582 using namespace system;
586 template<
typename TChar>
587 void appendDateTime(TAString<TChar>& target,
const DateTime::Duration pSrc)
589 using Duration= DateTime::Duration;
591 auto nanos= src.InNanoseconds();
594 target << units[Units::TS_ZERO];
601 src= Duration() - src;
605 nf.FractionalPartWidth= 2;
606 int64_t v= src.InAbsoluteDays();
609 target << TFormat<TChar>( src.InDays(), &nf ) << units[Units::DayPlural];
615 target << v << ( v != 1 ? units[Units::DayPlural]
616 : units[Units::DaySingular] );
618 Duration cpy= src - ( Duration::FromAbsoluteDays(v) );
620 target << ' ' << TFormat<TChar>( cpy.InHours(), &nf ) << units[Units::HourPlural];
624 v= src.InAbsoluteHours();
627 target << v << ( v != 1 ? units[Units::HourPlural]
628 : units[Units::HourSingular] );
630 Duration cpy= src - ( Duration::FromAbsoluteHours(v) );
632 auto minutes= cpy.InAbsoluteMinutes();
633 target <<
' ' << minutes << (minutes!= 1 ? units[Units::MinPlural]
634 : units[Units::MinSingular] );
638 v= src.InAbsoluteMinutes();
641 target << v << ( v != 1 ? units[Units::MinPlural]
642 : units[Units::MinSingular] );
644 Duration cpy= src - ( Duration::FromAbsoluteMinutes(v) );
646 auto seconds= cpy.InAbsoluteSeconds();
647 target <<
' ' << seconds << (seconds!= 1 ? units[Units::SecPlural]
648 : units[Units::SecSingular] );
652 v= src.InAbsoluteSeconds();
655 target << TFormat<TChar>( src.InSeconds(), &nf ) << units[Units::SecPlural];
659 nf.DecMinimumFieldWidth= 3;
661 auto val= src.InAbsoluteMilliseconds();
664 target << TFormat<TChar>(val,&nf) << ( val!= 1 ? units[Units::MlSecPlural]
665 : units[Units::MlSecSingular] );
669 val= src.InAbsoluteMicroseconds();
672 target << TFormat<TChar>(val,&nf) << ( val!= 1 ? units[Units::McSecPlural]
673 : units[Units::McSecSingular] );
677 val= src.InNanoseconds();
678 target << TFormat<TChar>(val,&nf) << ( val!= 1 ? units[Units::NSecPlural]
679 : units[Units::NSecSingular] );
685 template<
typename TChar>
688 appendDateTime( target, src );
691 template<
typename TChar>
695 appendDateTime( target, time::DateTime::Duration::FromNanoseconds( src.InNanoseconds() ));