dual with statement

Jay Norwood via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jul 24 18:54:52 PDT 2014


On Thursday, 24 July 2014 at 20:16:53 UTC, monarch_dodra wrote:
>
> Or did I miss something?

Yes, sorry, I should have pasted a full example previously. The 
code at the end is with the Raw_met members renamed (they were 
originally a and b but clashed).

So, if Raw_met members were still a and b ...
   with(ar.r as v) with (ar.rm as res){
      res.a = v.a + v.c;
      res.b = (v.c==0)? 0: (v.a + v.b)/ v.c;

I don't recall the exact use case for the database expressions, 
but I believe they were substituting a simple symbol for the 
fully qualified object. So they would have done something 
analogous to this ...

   with (ar.rm.a as d) with (ar.rm.b as e) with (ar.r.a as a) with 
(ar.r.b as b) with (ar.r.c as c){
      d = a + c;
      e = (c==0)?0:(a+b)/c;
}

So, the expressions are simpler to read, and I've fully qualified 
the members only a single time.



----  this is the code for one of the metric experiments, with 
the members renamed to avoid the clashes.  I like that the 
expressions can be so simple.

double ref_clock=1_600_000_000.0;
struct Raw_met {long d; double e;}
struct Per_sec_met {double d; double e; }
struct Per_cyc_met {double d; double e; }


struct Raw {long proc_cyc; long a; long b; long c; }
struct Per_sec {double proc_cyc; double a; double b; double c; }
struct Per_cyc {double proc_cyc; double a; double b; double c; }
struct All { Raw r; Per_sec ps; Per_cyc pc; Raw_met rm; 
Per_sec_met psm; Per_cyc_met pcm;}


void calc_raw_met(ref All ar){
        with(ar.r) with(ar.rm){
          d = a+c;
          e = (c==0)?0:(a+b)/c;
        }
}



More information about the Digitalmars-d-learn mailing list