www.digitalmars.com         C & C++   DMDScript  

digitalmars.dip.ideas - ternary op assign

reply monkyyy <crazymonkyyy gmail.com> writes:
`foo?=bar:baz` is rewritten as `foo.opOpAssign!("?:")(bar,baz)`

`foo[i]?=bar:baz` opIndexOpAssign

for basic types it acts as `foo=(bool)bar?foo:(typeof(foo))baz`
May 02
next sibling parent reply Stefan Koch <uplink.coder googlemail.com> writes:
On Thursday, 2 May 2024 at 17:42:28 UTC, monkyyy wrote:
 `foo?=bar:baz` is rewritten as `foo.opOpAssign!("?:")(bar,baz)`

 `foo[i]?=bar:baz` opIndexOpAssign

 for basic types it acts as `foo=(bool)bar?foo:(typeof(foo))baz`
I find this syntax confusing, I would interpret that as: `foo[i] = (foo[i] ? bar : baz);`
May 02
parent monkyyy <crazymonkyyy gmail.com> writes:
On Thursday, 2 May 2024 at 18:17:12 UTC, Stefan Koch wrote:
 On Thursday, 2 May 2024 at 17:42:28 UTC, monkyyy wrote:
 `foo?=bar:baz` is rewritten as `foo.opOpAssign!("?:")(bar,baz)`

 `foo[i]?=bar:baz` opIndexOpAssign

 for basic types it acts as `foo=(bool)bar?foo:(typeof(foo))baz`
I find this syntax confusing, I would interpret that as: `foo[i] = (foo[i] ? bar : baz);`
often the statement you want to write is a=condition?b:a which repeats a, the way to simplify (and prevent int promtion issues) is with the += family of statements; but there isnt a clear one for if(cond)a=b Simd(/waterfalled code) has to do bit mask tricks, and I think you could wrap that up in a data structure with the opslice as recursive templates for opindex logic ```d a/=4; b+=a; if(a>b)a=b; --- a[0..4]/=4; b[0..4]+=a[0..4]; ???? ```
May 02
prev sibling parent reply Quirin Schroll <qs.il.paperinik gmail.com> writes:
On Thursday, 2 May 2024 at 17:42:28 UTC, monkyyy wrote:
 `foo?=bar:baz` is rewritten as `foo.opOpAssign!("?:")(bar,baz)`

 `foo[i]?=bar:baz` opIndexOpAssign

 for basic types it acts as `foo=(bool)bar?foo:(typeof(foo))baz`
Isn’t this just `if (!bar) foo = baz;`? Where would the user-defined operator be useful?
May 16
parent monkyyy <crazymonkyyy gmail.com> writes:
On Thursday, 16 May 2024 at 16:57:17 UTC, Quirin Schroll wrote:
 On Thursday, 2 May 2024 at 17:42:28 UTC, monkyyy wrote:
 `foo?=bar:baz` is rewritten as `foo.opOpAssign!("?:")(bar,baz)`

 `foo[i]?=bar:baz` opIndexOpAssign

 for basic types it acts as `foo=(bool)bar?foo:(typeof(foo))baz`
Isn’t this just `if (!bar) foo = baz;`? Where would the user-defined operator be useful?
when bar depends on foo; such as a user defined cond, lets saya database query that takes in lamdas `foo?=a=>a%2:baz` and when its "multiable data single instruction", simd or parrellizism, ranges etc. and theres something in that index you can not write `if(!bar[foo's slice????]) foo=baz[...];`
May 16