@@ -394,55 +394,65 @@ pure nothrow @nogc:
394394 import urt.string .format : FormatArg;
395395 ptrdiff_t toString (char [] buffer, const (char )[] format, const (FormatArg)[] formatArgs) const
396396 {
397- import urt.conv : format_int;
397+ import urt.conv : format_int, format_uint;
398+
399+ ptrdiff_t len;
400+ if (! buffer.ptr)
401+ {
402+ len = 15 ; // all the fixed chars
403+ len += year.format_int(null );
404+ if (ns)
405+ {
406+ ++ len; // the dot
407+ uint nsecs = ns;
408+ uint m = 0 ;
409+ while (nsecs)
410+ {
411+ ++ len;
412+ uint digit = nsecs / digit_multipliers[m];
413+ nsecs -= digit * digit_multipliers[m++ ];
414+ }
415+ }
416+ return len;
417+ }
398418
399419 size_t offset = 0 ;
400- ptrdiff_t len = year.format_int(buffer[offset.. $]);
420+ len = year.format_int(buffer[offset.. $]);
401421 if (len < 0 || len == buffer.length)
402422 return - 1 ;
403423 offset += len;
404424 buffer[offset++ ] = ' -' ;
405- len = month.format_int(buffer[offset.. $]);
406- if (len < 0 || len == buffer.length)
407- return - 1 ;
408- offset += len;
425+ buffer[offset++ ] = ' 0' + (month / 10 );
426+ buffer[offset++ ] = ' 0' + (month % 10 );
409427 buffer[offset++ ] = ' -' ;
410- len = day.format_int(buffer[offset.. $]);
411- if (len < 0 || len == buffer.length)
412- return - 1 ;
413- offset += len;
428+ buffer[offset++ ] = ' 0' + (day / 10 );
429+ buffer[offset++ ] = ' 0' + (day % 10 );
414430 buffer[offset++ ] = ' T' ;
415- len = hour.format_int(buffer[offset.. $], 10 , 2 , ' 0' );
416- if (len < 0 || len == buffer.length)
417- return - 1 ;
418- offset += len;
431+ buffer[offset++ ] = ' 0' + (hour / 10 );
432+ buffer[offset++ ] = ' 0' + (hour % 10 );
419433 buffer[offset++ ] = ' :' ;
420- len = minute.format_int(buffer[offset.. $], 10 , 2 , ' 0' );
421- if (len < 0 || len == buffer.length)
422- return - 1 ;
423- offset += len;
434+ buffer[offset++ ] = ' 0' + (minute / 10 );
435+ buffer[offset++ ] = ' 0' + (minute % 10 );
424436 buffer[offset++ ] = ' :' ;
425- len = second.format_int(buffer[offset.. $], 10 , 2 , ' 0' );
426- if (len < 0 )
427- return - 1 ;
428- offset += len;
437+ buffer[offset++ ] = ' 0' + (second / 10 );
438+ buffer[offset++ ] = ' 0' + (second % 10 );
429439 if (ns)
430440 {
431- if (len == buffer.length)
441+ if (offset == buffer.length)
432442 return - 1 ;
433443 buffer[offset++ ] = ' .' ;
434444 uint nsecs = ns;
435445 uint m = 0 ;
436446 while (nsecs)
437447 {
438- if (len == buffer.length)
448+ if (offset == buffer.length)
439449 return - 1 ;
440450 int digit = nsecs / digit_multipliers[m];
441451 buffer[offset++ ] = cast (char )(' 0' + digit);
442452 nsecs -= digit * digit_multipliers[m++ ];
443453 }
444454 }
445- return offset + len ;
455+ return offset;
446456 }
447457
448458 ptrdiff_t fromString (const (char )[] s)
0 commit comments