www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - D 2.x invariant question

reply Charles D Hixson <charleshixsn earthlink.net> writes:
Would the following function:
invariant Body	opIndex	(Key k)
{  if (k in _cache)
    { ....
       return  _cache[k].bdy;
    }
    return  null;
}

return values that were invariant, or would that type have to 
be declared at the declaration of the type "Body"?
Oct 31 2007
parent reply "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"Charles D Hixson" <charleshixsn earthlink.net> wrote in message 
news:fgao71$21fp$1 digitalmars.com...
 Would the following function:
 invariant Body opIndex (Key k)
 {  if (k in _cache)
    { ....
       return  _cache[k].bdy;
    }
    return  null;
 }

 return values that were invariant, or would that type have to be declared 
 at the declaration of the type "Body"?

I think this makes the method opIndex invariant, which means this function can only access invariant members, or something. If you want an invariant(Body), use... invariant(Body) as the return type. Aside: performance increase, you can avoid the double lookup: if(auto val = k in cache) { ..use val here.. return val.bdy; } 'in' returns a pointer to the value, and you can declare and assign a variable in the condition of an 'if' statement.
Oct 31 2007
parent Charles D Hixson <charleshixsn earthlink.net> writes:
Jarrett Billingsley wrote:
 "Charles D Hixson" <charleshixsn earthlink.net> wrote in message 
 news:fgao71$21fp$1 digitalmars.com...
 Would the following function:
 invariant Body opIndex (Key k)
 {  if (k in _cache)
    { ....
       return  _cache[k].bdy;
    }
    return  null;
 }

 return values that were invariant, or would that type have to be declared 
 at the declaration of the type "Body"?

I think this makes the method opIndex invariant, which means this function can only access invariant members, or something. If you want an invariant(Body), use... invariant(Body) as the return type. Aside: performance increase, you can avoid the double lookup: if(auto val = k in cache) { ..use val here.. return val.bdy; } 'in' returns a pointer to the value, and you can declare and assign a variable in the condition of an 'if' statement.

(I *kenw* that about "in", but I keep forgetting.)
Oct 31 2007