I would be surprised if that word becomes a bottleneck, but I can
understand trying to be performance-aware as you build out a system.
Are you dealing with floating point numbers of seconds? Because if so, I
would guess it easier/faster/more correct to round the number of seconds
first and then operate on integers. If you aren't dealing with floats,
then rounding is redundant. So, perhaps something like this:
: seconds>hms ( n -- str )
round >integer 60 /mod [ 60 /mod ] dip 3array [ pad-00 ] map ":"
join ;
For what it's worth, using formatting is only like 5-7% slower:
"%02d:%02d:%02d" sprintf
Than this equivalent set of sequence operations:
3array [ pad-00 ] map ":" join
Best,
John.
On Wed, Jul 20, 2016 at 6:19 AM, Jon Harper <jon.harpe...@gmail.com> wrote:
> Regarding over engineering, I think that the composability of factor's
> libraries make the object allocations worth it. See
> https://docs.factorcode.org/content/article-cookbook-philosophy.html "Object
> allocation is very cheap. Don't be afraid to create tuples [...]".
>
> However, the restriction to timestamps with TYPED: was added exactly (see
> b059ade5eda) to prevent using those words on durations. That's because
> their internal state doesn't behave like timestamps and you must call the
> duration>XX words instead of accessing the slots directly:
>
> 3600 seconds (timestamp>hms)
> 00:00:3600
>
> 3600 seconds duration>hm
> "01:00"
>
> It looks like we could have more duration>XXX formatting words ?
>
> Also, in calendar.format, write-gmt-offset and write-rfc3339-gmt-offset
> access the slots directly. So now we have:
> 2010 10 10 10 10 10 1 hours <timestamp> timestamp>rfc822
> "Sun, 10 Oct 2010 10:10:10 +0100"
> 2010 10 10 10 10 10 3600 seconds <timestamp> timestamp>rfc822 .
> "Sun, 10 Oct 2010 10:10:10 +0000"
>
> Bug of feature ? :)
>
>
>
> Jon
>
> On Wed, Jul 20, 2016 at 10:07 AM, Alexander Ilin <ajs...@yandex.ru> wrote:
>
>> Hello!
>>
>> On the second thought, that may be overengineering a bit. After all, do
>> I need to create a duration object and a string stream (within a namespace
>> to override output-stream) just to do some string manipulation? Here's a
>> solution with smaller overhead :
>>
>> : seconds>hms ( n -- str )
>> 60 /mod round [ 60 /mod round ] dip 3array [ pad-00 ] map ":" join ;
>>
>> 20.07.2016, 10:44, "Alexander Ilin" <ajs...@yandex.ru>:
>> > Hello!
>> >
>> > I'm measuring some processes, which take anywhere from seconds to
>> hours to run.
>> > I record the number of seconds in a DB for future reference.
>> > When presenting the data to the user (myself) I want to see a
>> hh:mm:ss string instead of thousands of seconds.
>> >
>> > Is there a way to format a duration tuple in such a way? The closest
>> thing I found is timestamp>hms, which does exactly what I want, but it is
>> TYPED:, and only accepts timestamps. Can I add the following word to the
>> calendar.format, or is there a better way?
>> >
>> > TYPED: duration>hms ( duration: duration -- str )
>> > [ (timestamp>hms) ] with-string-writer ;
>> >
>> > ---=====---
>> > Александр
>> >
>> >
>> ------------------------------------------------------------------------------
>> > What NetFlow Analyzer can do for you? Monitors network bandwidth and
>> traffic
>> > patterns at an interface-level. Reveals which users, apps, and
>> protocols are
>> > consuming the most bandwidth. Provides multi-vendor support for NetFlow,
>> > J-Flow, sFlow and other flows. Make informed decisions using capacity
>> planning
>> > reports.http://sdm.link/zohodev2dev
>> > _______________________________________________
>> > Factor-talk mailing list
>> > Factor-talk@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/factor-talk
>>
>> ---=====---
>> Александр
>>
>>
>> ------------------------------------------------------------------------------
>> What NetFlow Analyzer can do for you? Monitors network bandwidth and
>> traffic
>> patterns at an interface-level. Reveals which users, apps, and protocols
>> are
>> consuming the most bandwidth. Provides multi-vendor support for NetFlow,
>> J-Flow, sFlow and other flows. Make informed decisions using capacity
>> planning
>> reports.http://sdm.link/zohodev2dev
>> _______________________________________________
>> Factor-talk mailing list
>> Factor-talk@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/factor-talk
>>
>
>
>
> ------------------------------------------------------------------------------
> What NetFlow Analyzer can do for you? Monitors network bandwidth and
> traffic
> patterns at an interface-level. Reveals which users, apps, and protocols
> are
> consuming the most bandwidth. Provides multi-vendor support for NetFlow,
> J-Flow, sFlow and other flows. Make informed decisions using capacity
> planning
> reports.http://sdm.link/zohodev2dev
> _______________________________________________
> Factor-talk mailing list
> Factor-talk@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
>
------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports.http://sdm.link/zohodev2dev
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk