[chuck-users] making a duration into a string?

mike clemow michaelclemow at gmail.com
Sun Jan 10 14:09:51 EST 2010


.toString() method works on objects only.  printing time and duration is
always a little more work.

fun void printTime(time t)
{
    <<< t/second, "::second" >>>;
}

printTime(now);

or for durations, you can do the same kind of thing:

fun void printTime(dur t)
{
    <<< t/second, "::second" >>>;
}

printTime(400::ms);

this is generally what i do when i need to know print this kind of
information.

-mike


On Sat, Jan 9, 2010 at 11:01 PM, Andrew Turley <aturley at acm.org> wrote:

> Sorry, yeah, the short answer is that there doesn't seem to be a good
> way to do what you're trying to do.
>
> If you want to see what Chuck does with "<<<" and ">>>", take a look
> at  Chuck_Instr_Hack::execute( Chuck_VM * vm, Chuck_VM_Shred * shred )
> in chuck_instr.cpp for the details. There really isn't much in the way
> of conversion, it just uses fprintf to print a double.
>
> andy
>
> On Sat, Jan 9, 2010 at 2:27 PM, Robert Poor <rdpoor at gmail.com> wrote:
> > Andrew: Yep, I'd come up with the same thing: dedicated functions to
> > convert times and durations into strings.  That works fine, but my
> > question was actually simpler, and I apologize for not making it
> > clear.  What I should have said:
> >
> > "It's clear that there are internal functions for converting times and
> > durations into strings, used in constructs such as:
> >  <<< now, 1::second >>>;
> > Are those internal functions available?"
> >
> > ... and I'm guessing the answer is simply "no".  Your suggested
> > solution will do the job just fine (though I'd follow ChucK's lead and
> > print everything in terms of samples).  Thanks!
> >
> > - Rob
> >
> > On Sat, Jan 9, 2010 at 14:11, Andrew Turley <aturley at acm.org> wrote:
> >> So are you looking for something like this?
> >>
> >> fun void log(string s) {
> >>  <<<s>>>;
> >> }
> >>
> >> fun string stringify(dur d) {
> >>  return "" + ((d / (1::second))) + " seconds";
> >> }
> >>
> >> fun string stringify(time t) {
> >>  return "" + ((t / (1::second))) + " seconds";
> >> }
> >>
> >> 1::second => dur d1;
> >> log("d1 is " + stringify(d1)); // "d1 is 1 seconds"
> >> 300::samp => dur d2;
> >> log("d2 is " + stringify(d2)); // "d2 is 0.0068 seconds"
> >>
> >> now + 60::second => time t1;
> >> log("t1 is " + stringify(t1)); // "t1 is 60 seconds"
> >> now + 1::minute => time t2;
> >> log("t2 is " + stringify(t2)); // "t2 is 60 seconds"
> >>
> >> Or are you trying to do something else?
> >>
> >> Understand that times are represented as a delta of the number of
> >> samples since the VM (or maybe it's the shred) started executing.
> >> Again, the time itself doesn't carry any information about how it was
> >> created, so these two times would have the same representation if they
> >> were created at the same time:
> >>
> >> now + 1::minute => time t1;
> >> now + 60::second => time t2;
> >>
> >> And these two times have different representations since they are not
> >> created at the same time:
> >>
> >> now + 1::minute => time t1;
> >> 5::second => now;
> >> now + 60::second => time t2;
> >>
> >> andy
> >>
> >> On Sat, Jan 9, 2010 at 1:16 PM, Robert Poor <rdpoor at gmail.com> wrote:
> >>> Sure, can do, but this is only for debugging -- I'd welcome a means to
> >>> get the same effect as
> >>>  <<< "duration is", d >>>;
> >>> which obviously works, but not as a string.  Same comments apply for
> >>> stringifying a time value.
> >>>
> >>> - Rob
> >>>
> >>> On Sat, Jan 9, 2010 at 13:08, Andrew Turley <aturley at acm.org> wrote:
> >>>> Are you looking for a way to generate something that would ultimately
> >>>> generate a string that contains "1::second"? Because if that's the
> >>>> case, you probably can't do it. Durations ultimately get stored as
> >>>> floats that represent the number of samples in the duration. And they
> >>>> don't, as far as I know, retain any information about the units that
> >>>> were used when they were created. So 6::second and 0.1::minute will
> >>>> both be stored as the number of samples that are contained in a 6
> >>>> second interval.
> >>>>
> >>>> Now, what you can do is convert the duration to a float by doing this:
> >>>>
> >>>> 1::second => dur d;
> >>>> d / (1::samp) => float dSamp;
> >>>>
> >>>> And then you could convert that float to a string. Now what you
> >>>> probably want is a duration in terms of time rather than samples, so
> >>>> you could also get the number of samples per second and divide dSamp
> >>>> by that number, and then store your duration as a string
> >>>> representation of a floating point number represented in terms of
> >>>> seconds (or maybe you want milliseconds).
> >>>>
> >>>> andy
> >>>>
> >>>> On Sat, Jan 9, 2010 at 12:50 PM, Robert Poor <rdpoor at gmail.com>
> wrote:
> >>>>> How can I cast a duration into a string (e.g. for passing as a string
> >>>>> argument)?  Consider:
> >>>>>
> >>>>> // =============
> >>>>> fun void log(string message) {
> >>>>>  // do something to log the message
> >>>>> }
> >>>>>
> >>>>> 1::second => dur d;
> >>>>> log("the duration is " + d);  // fails with "cannot perform '+' on
> >>>>> object references"
> >>>>> log("the duration is " + d.toString()); // fails with "type 'dur'
> does
> >>>>> not have members"
> >>>>> // =============
> >>>>>
> >>>>> Same question for time objects.
> >>>>>
> >>>>> TIA.
> >>>>>
> >>>>> - Rob
> >>>>> _______________________________________________
> >>>>> chuck-users mailing list
> >>>>> chuck-users at lists.cs.princeton.edu
> >>>>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
> >>>>>
> >>>> _______________________________________________
> >>>> chuck-users mailing list
> >>>> chuck-users at lists.cs.princeton.edu
> >>>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
> >>>>
> >>>
> >>
> > _______________________________________________
> > chuck-users mailing list
> > chuck-users at lists.cs.princeton.edu
> > https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
> >
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>



-- 
http://michaelclemow.com
http://semiotech.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cs.princeton.edu/pipermail/chuck-users/attachments/20100110/1046a1fb/attachment-0001.html>


More information about the chuck-users mailing list