@@ -13,7 +13,6 @@ const lib_file ="/tmp/Timezone/data.mdb";
13
13
14
14
const AllocDate = std .mem .Allocator ;
15
15
const Order = std .math .Order ;
16
- const allocDT = std .heap .page_allocator ;
17
16
18
17
19
18
pub const MIN_YEAR : u16 = 1 ;
@@ -33,6 +32,14 @@ var udate: DATE = undefined;
33
32
Failed_value ,
34
33
};
35
34
35
+
36
+
37
+
38
+
39
+ var arenaDate = std .heap .ArenaAllocator .init (std .heap .page_allocator );
40
+ var allocDate = arenaDate .allocator ();
41
+ var arenaDtime = std .heap .ArenaAllocator .init (std .heap .page_allocator );
42
+ var allocDtime = arenaDtime .allocator ();
36
43
//----------------------------------
37
44
// outils
38
45
//----------------------------------
@@ -83,6 +90,11 @@ pub const DTIME = struct {
83
90
nanosecond : u64 = 0 ,// 0> 999999999
84
91
tmz : i16 = 0 ,
85
92
93
+ pub fn deinitAlloc () void {
94
+ arenaDtime .deinit ();
95
+ arenaDtime = std .heap .ArenaAllocator .init (std .heap .page_allocator );
96
+ allocDtime = arenaDtime .allocator ();
97
+ }
86
98
//Change of field attribute
87
99
pub fn hardTime (buf :[]const u8 , ntmz :i32 ) DTIME {
88
100
@@ -174,11 +186,11 @@ pub const DTIME = struct {
174
186
175
187
const day : u64 = days_since_epoch + 1 ;
176
188
const chronoHardFMT :[]const u8 = "{:0>4}{:0>2}{:0>2}{:0>2}{:0>2}{:0>2}{:0>9}" ;
177
- const r : []const u8 = std .fmt .allocPrint (allocDT , chronoHardFMT ,
189
+ const r : []const u8 = std .fmt .allocPrint (allocDate , chronoHardFMT ,
178
190
.{ year , month , day , hr , min ,sec ,ns }) catch unreachable ;
179
191
180
192
const tm = hardTime (r , 0 ) ;
181
- defer allocDT .free (r );
193
+ defer allocDate .free (r );
182
194
return tm ;
183
195
}
184
196
@@ -250,32 +262,32 @@ pub const DTIME = struct {
250
262
const day : u64 = days_since_epoch + 1 ;
251
263
252
264
const chronoHardFMT :[]const u8 = "{:0>4}{:0>2}{:0>2}{:0>2}{:0>2}{:0>2}{:0>9}" ;
253
- const r : []const u8 = std .fmt .allocPrint (allocDT , chronoHardFMT ,
265
+ const r : []const u8 = std .fmt .allocPrint (allocDtime , chronoHardFMT ,
254
266
.{ year , month , day , hr , min ,sec ,ns }) catch unreachable ;
255
267
256
268
const tm = hardTime (r , offset ) ;
257
- defer allocDT .free (r );
269
+ defer allocDtime .free (r );
258
270
return tm ;
259
271
}
260
272
261
273
262
274
// Date-time formatting
263
275
const chronoTimeFMT :[]const u8 = "{:0>4}-{:0>2}-{:0>2}T:{:0>2}:{:0>2}:{:0>2}N:{:0>9}Z:{d}" ;
264
276
265
- pub fn stringTime (self : DTIME , allocat : AllocDate ) []const u8 {
266
- return std .fmt .allocPrint (allocat , chronoTimeFMT ,
277
+ pub fn stringTime (self : DTIME ) []const u8 {
278
+ return std .fmt .allocPrint (allocDtime , chronoTimeFMT ,
267
279
.{ self .year , self .month , self .day , self .hour , self .minute ,self .second ,self .nanosecond ,self .tmz })
268
280
catch unreachable ;
269
281
}
270
282
271
283
const chronoNumFMT = "{:0>4}{:0>2}{:0>2}{:0>2}{:0>2}{:0>2}{:0>9}{d}" ;
272
284
273
- pub fn numTime (self : DTIME , allocat : AllocDate ) u128 {
274
- const r : []const u8 = std .fmt .allocPrint (allocat , chronoNumFMT ,
285
+ pub fn numTime (self : DTIME ) u128 {
286
+ const r : []const u8 = std .fmt .allocPrint (allocDtime , chronoNumFMT ,
275
287
.{ self .year , self .month , self .day , self .hour , self .minute ,self .second ,self .nanosecond ,self .tmz })
276
288
catch unreachable ;
277
289
const i :u128 = std .fmt .parseInt (u128 ,r ,10 ) catch unreachable ;
278
- defer allocat .free (r );
290
+ defer allocDtime .free (r );
279
291
return i ;
280
292
281
293
}
@@ -294,7 +306,11 @@ pub const DATE = struct {
294
306
week : u6 , // Week of year 1-53
295
307
status : bool = false , // date null
296
308
297
-
309
+ pub fn deinitAlloc () void {
310
+ arenaDate .deinit ();
311
+ arenaDate = std .heap .ArenaAllocator .init (std .heap .page_allocator );
312
+ allocDate = arenaDate .allocator ();
313
+ }
298
314
299
315
// Create and validate the date
300
316
pub fn create (year : u32 , month : u32 , day : u32 ) ! DATE {
@@ -354,7 +370,7 @@ pub const DATE = struct {
354
370
pub fn copy (self : DATE ) ! DATE {
355
371
if (! isBad (self )) {
356
372
const s = @src ();
357
- @panic ( std .fmt .allocPrint (allocDT ,
373
+ @panic ( std .fmt .allocPrint (allocDate ,
358
374
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
359
375
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
360
376
catch unreachable );
@@ -427,9 +443,9 @@ pub const DATE = struct {
427
443
428
444
429
445
const chronoHardFMT :[]const u8 = "{:0>4}{:0>2}{:0>2}" ;
430
- const r : []const u8 = std .fmt .allocPrint (allocDT , chronoHardFMT ,
446
+ const r : []const u8 = std .fmt .allocPrint (allocDate , chronoHardFMT ,
431
447
.{ year , month , day }) catch unreachable ;
432
- defer allocDT .free (r );
448
+ defer allocDate .free (r );
433
449
434
450
var datx = hardDate (r );
435
451
datx .weekday = @intCast (dayNum (datx )); datx .week = @intCast (searchWeek (datx ));
@@ -443,7 +459,7 @@ pub const DATE = struct {
443
459
pub fn eql (self : DATE , other : DATE ) bool {
444
460
if (! isBad (self )) {
445
461
const s = @src ();
446
- @panic ( std .fmt .allocPrint (allocDT ,
462
+ @panic ( std .fmt .allocPrint (allocDate ,
447
463
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
448
464
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
449
465
catch unreachable );
@@ -454,7 +470,7 @@ pub const DATE = struct {
454
470
pub fn cmp (self : DATE , other : DATE ) Order {
455
471
if (! isBad (self )) {
456
472
const s = @src ();
457
- @panic ( std .fmt .allocPrint (allocDT ,
473
+ @panic ( std .fmt .allocPrint (allocDate ,
458
474
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
459
475
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
460
476
catch unreachable );
@@ -471,7 +487,7 @@ pub const DATE = struct {
471
487
pub fn gt (self : DATE , other : DATE ) bool {
472
488
if (! isBad (self )) {
473
489
const s = @src ();
474
- @panic ( std .fmt .allocPrint (allocDT ,
490
+ @panic ( std .fmt .allocPrint (allocDate ,
475
491
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
476
492
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
477
493
catch unreachable );
@@ -481,7 +497,7 @@ pub const DATE = struct {
481
497
pub fn gte (self : DATE , other : DATE ) bool {
482
498
if (! isBad (self )) {
483
499
const s = @src ();
484
- @panic ( std .fmt .allocPrint (allocDT ,
500
+ @panic ( std .fmt .allocPrint (allocDate ,
485
501
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
486
502
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
487
503
catch unreachable );
@@ -492,7 +508,7 @@ pub const DATE = struct {
492
508
pub fn lt (self : DATE , other : DATE ) bool {
493
509
if (! isBad (self )) {
494
510
const s = @src ();
495
- @panic ( std .fmt .allocPrint (allocDT ,
511
+ @panic ( std .fmt .allocPrint (allocDate ,
496
512
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
497
513
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
498
514
catch unreachable );
@@ -502,7 +518,7 @@ pub const DATE = struct {
502
518
pub fn lte (self : DATE , other : DATE ) bool {
503
519
if (! isBad (self )) {
504
520
const s = @src ();
505
- @panic ( std .fmt .allocPrint (allocDT ,
521
+ @panic ( std .fmt .allocPrint (allocDate ,
506
522
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
507
523
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
508
524
catch unreachable );
@@ -547,43 +563,43 @@ pub const DATE = struct {
547
563
548
564
// Return date in ISO format YYYY-MM-DD
549
565
const ISO_DATE_FMT = "{:0>4}-{:0>2}-{:0>2}" ;
550
- pub fn string (self : DATE , allocator : AllocDate ) []const u8 {
566
+ pub fn string (self : DATE ) []const u8 {
551
567
if (! isBad (self )) {
552
568
const s = @src ();
553
- @panic ( std .fmt .allocPrint (allocDT ,
569
+ @panic ( std .fmt .allocPrint (allocDate ,
554
570
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
555
571
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
556
572
catch unreachable );
557
573
}
558
- return std .fmt .allocPrint (allocator , ISO_DATE_FMT ,
574
+ return std .fmt .allocPrint (allocDate , ISO_DATE_FMT ,
559
575
.{ self .year , self .month , self .day }) catch unreachable ;
560
576
}
561
577
562
578
// Return date in FR format DD/MM/YYYY
563
579
const FR_DATE_FMT = "{:0>2}/{:0>2}/{:0>4}" ;
564
- pub fn stringFR (self : DATE , allocator : AllocDate ) []const u8 {
580
+ pub fn stringFR (self : DATE ) []const u8 {
565
581
if (! isBad (self )) {
566
582
const s = @src ();
567
- @panic ( std .fmt .allocPrint (allocDT ,
583
+ @panic ( std .fmt .allocPrint (allocDate ,
568
584
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
569
585
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
570
586
catch unreachable );
571
587
}
572
- return std .fmt .allocPrint (allocator , FR_DATE_FMT ,
588
+ return std .fmt .allocPrint (allocDate , FR_DATE_FMT ,
573
589
.{ self .day , self .month , self .year }) catch unreachable ;
574
590
}
575
591
576
592
// Return date in FR format MM/DD/YYYY
577
593
const US_DATE_FMT = "{:0>2}/{:0>2}/{:0>4}" ;
578
- pub fn stringUS (self : DATE , allocator : AllocDate ) []const u8 {
594
+ pub fn stringUS (self : DATE ) []const u8 {
579
595
if (! isBad (self )) {
580
596
const s = @src ();
581
- @panic ( std .fmt .allocPrint (allocDT ,
597
+ @panic ( std .fmt .allocPrint (allocDate ,
582
598
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
583
599
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
584
600
catch unreachable );
585
601
}
586
- return std .fmt .allocPrint (allocator , US_DATE_FMT ,
602
+ return std .fmt .allocPrint (allocDate , US_DATE_FMT ,
587
603
.{ self .month , self .day , self .year }) catch unreachable ;
588
604
}
589
605
@@ -641,7 +657,7 @@ pub const DATE = struct {
641
657
ctrl .year = self .year ; ctrl .month = self .month ; ctrl .day = self .day ; ctrl .status = self .status ;
642
658
if (! isBadx (self )) {
643
659
const s = @src ();
644
- @panic ( std .fmt .allocPrint (allocDT ,
660
+ @panic ( std .fmt .allocPrint (allocDate ,
645
661
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
646
662
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
647
663
catch unreachable );
@@ -662,7 +678,7 @@ pub const DATE = struct {
662
678
pub fn daysLess (self : * DATE , days : u32 ) bool {
663
679
if (! isBadx (self )) {
664
680
const s = @src ();
665
- @panic ( std .fmt .allocPrint (allocDT ,
681
+ @panic ( std .fmt .allocPrint (allocDate ,
666
682
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
667
683
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
668
684
catch unreachable );
@@ -684,7 +700,7 @@ pub const DATE = struct {
684
700
pub fn yearsMore (self : * DATE , year : u32 ) bool {
685
701
if (! isBadx (self )) {
686
702
const s = @src ();
687
- @panic ( std .fmt .allocPrint (allocDT ,
703
+ @panic ( std .fmt .allocPrint (allocDate ,
688
704
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
689
705
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
690
706
catch unreachable );
@@ -709,7 +725,7 @@ pub const DATE = struct {
709
725
pub fn yearsLess (self : * DATE , year : u32 ) bool {
710
726
if (! isBadx (self )) {
711
727
const s = @src ();
712
- @panic ( std .fmt .allocPrint (allocDT ,
728
+ @panic ( std .fmt .allocPrint (allocDate ,
713
729
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
714
730
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
715
731
catch unreachable );
@@ -736,7 +752,7 @@ pub const DATE = struct {
736
752
(self .month < 1 or self .month > 12 ) or
737
753
(self .day < 1 or self .day > daysInMonth (self .year , self .month )) ) {
738
754
const s = @src ();
739
- @panic ( std .fmt .allocPrint (allocDT ,
755
+ @panic ( std .fmt .allocPrint (allocDate ,
740
756
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
741
757
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
742
758
catch unreachable );
@@ -906,7 +922,7 @@ pub const DATE = struct {
906
922
907
923
if ( ord > MAX_ORDINAL ){
908
924
const s = @src ();
909
- @panic ( std .fmt .allocPrint (allocDT ,
925
+ @panic ( std .fmt .allocPrint (allocDate ,
910
926
"\n\n \r file:{s} line:{d} column:{d} func:{s}({d}) ordinal out-of-service err:{}\n \r "
911
927
,.{s .file , s .line , s .column ,s .fn_name ,ord ,Error .Failed_zone })
912
928
catch unreachable );
@@ -959,28 +975,28 @@ pub const DATE = struct {
959
975
960
976
// Return date extended
961
977
const DATE_FMT_EXT = "{s} {:0>2} {s} {:0>4}" ;
962
- pub fn dateExt (self : DATE , allocator : AllocDate , lng : Idiom ) []u8 {
978
+ pub fn dateExt (self : DATE , lng : Idiom ) []u8 {
963
979
if (! isBad (self )) {
964
980
const s = @src ();
965
- @panic ( std .fmt .allocPrint (allocDT ,
981
+ @panic ( std .fmt .allocPrint (allocDate ,
966
982
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
967
983
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
968
984
catch unreachable );
969
985
}
970
- return std .fmt .allocPrint (allocator , DATE_FMT_EXT ,
986
+ return std .fmt .allocPrint (allocDate , DATE_FMT_EXT ,
971
987
.{ Idiom .nameDay (self .weekday ,lng ), self .day ,Idiom .nameMonth (self .month ,lng ), self .year }) catch unreachable ;
972
988
}
973
989
974
990
const DATE_FMT_ABR = "{s}. {:0>2} {s}. {:0>4}" ;
975
- pub fn dateAbr (self : DATE , allocator : AllocDate , lng : Idiom ) []u8 {
991
+ pub fn dateAbr (self : DATE , lng : Idiom ) []u8 {
976
992
if (! isBad (self )) {
977
993
const s = @src ();
978
- @panic ( std .fmt .allocPrint (allocDT ,
994
+ @panic ( std .fmt .allocPrint (allocDate ,
979
995
"\n\n \r file:{s} line:{d} column:{d} func:{s} out-of-service err:{} >>{d}-{d}-{d}\n \r "
980
996
,.{s .file , s .line , s .column ,s .fn_name ,Error .Failed_zone , self .year , self .month , self .day })
981
997
catch unreachable );
982
998
}
983
- return std .fmt .allocPrint (allocator , DATE_FMT_ABR ,
999
+ return std .fmt .allocPrint (allocDate , DATE_FMT_ABR ,
984
1000
.{ Idiom .abbrevDay (self .weekday ,lng ), self .day , Idiom .abbrevMonth (self .month ,lng ), self .year }) catch unreachable ;
985
1001
}
986
1002
0 commit comments