www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Extra Array Operator Overloading Request

reply Jonathan Crapuchettes <jcrapuchettes gmail.com> writes:
I do a lot of matrix calculations with a D library that I have written and it
would be really nice to be able to overload a few more array operators, like
assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this feature been
approved, discussed, or planned?
Thanks,
JC
May 30 2007
parent reply Johan Granberg <lijat.meREM OVEgmail.com> writes:
Jonathan Crapuchettes wrote:

 I do a lot of matrix calculations with a D library that I have written and
 it would be really nice to be able to overload a few more array operators,
 like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this
 feature been approved, discussed, or planned? Thanks, JC
What is preventing you from doing so now? if opIndex returns a type that overloads opAddAssign your example should be possible right now.
May 30 2007
parent reply Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
Johan Granberg wrote:
 Jonathan Crapuchettes wrote:
 
 I do a lot of matrix calculations with a D library that I have written and
 it would be really nice to be able to overload a few more array operators,
 like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this
 feature been approved, discussed, or planned? Thanks, JC
What is preventing you from doing so now? if opIndex returns a type that overloads opAddAssign your example should be possible right now.
Typically, if you have a matrix of T you'd want to have mat[i,j] (or mat[i][j]) return either a T or something that implicitly converts to one. Since you can only overload operators on aggregates (class, struct, union) but can't define implicit conversions for them...
May 30 2007
parent reply Johan Granberg <lijat.meREM OVEgmail.com> writes:
Frits van Bommel wrote:

 Johan Granberg wrote:
 Jonathan Crapuchettes wrote:
 
 I do a lot of matrix calculations with a D library that I have written
 and it would be really nice to be able to overload a few more array
 operators,
 like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this
 feature been approved, discussed, or planned? Thanks, JC
What is preventing you from doing so now? if opIndex returns a type that overloads opAddAssign your example should be possible right now.
Typically, if you have a matrix of T you'd want to have mat[i,j] (or mat[i][j]) return either a T or something that implicitly converts to one. Since you can only overload operators on aggregates (class, struct, union) but can't define implicit conversions for them...
But if T supports both opIndex and opAssign that wouldn't be a problem, right?
May 30 2007
parent Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
Johan Granberg wrote:
 Frits van Bommel wrote:
 
 Johan Granberg wrote:
 Jonathan Crapuchettes wrote:

 I do a lot of matrix calculations with a D library that I have written
 and it would be really nice to be able to overload a few more array
 operators,
 like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this
 feature been approved, discussed, or planned? Thanks, JC
What is preventing you from doing so now? if opIndex returns a type that overloads opAddAssign your example should be possible right now.
Typically, if you have a matrix of T you'd want to have mat[i,j] (or mat[i][j]) return either a T or something that implicitly converts to one. Since you can only overload operators on aggregates (class, struct, union) but can't define implicit conversions for them...
But if T supports both opIndex and opAssign that wouldn't be a problem, right?
(Presumably you mean opAddAssign instead of opIndex?) Only if T is a struct or union[1], and its author was aware of the need to put it in that particular Matrix implementation (or you're willing to modify it to fit[2]). If it's a primitive type like (int, float, cfloat) and variants, or a class (hint: opAssign can't modify the reference) you're screwed. [1]: Requirements: value type with possibility of operator overloading. [2]: Hopefully by way of a mixin, since there's a lot of op<X>Assign operators.
May 30 2007