[Scilab-users] overloading size for tlist

classic Classic list List threaded Threaded
3 messages Options
Philippe Roux Philippe Roux
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[Scilab-users] overloading size for tlist

Hi to all,

I've created a new type "mytype", represented by tlist, and another type
"matrixmytype", for matrix of "mytype" object, represented by mlist .
I've created the function %matrixmytype_size to overload the function
"size" for "matrixmytype" objects (it works fine) . For compatibility
reason I would like that size(x), where typeof(x)=='mytype', retrieve
the value [1,1], but actually size(x) return the size of the tlist for x
 an "mytype" .

 Let's take a minimal example :

//*****************************************************
function x=mytype()
    x=tlist(['mytype' 'tab' 'pol' 'str'],..
            grand(2,3,'uin',1,3), ..          //x.tab
            poly(0,'x'), ..                   //x.pol
            'scilab')                         //x.str
endfunction

function [p,n]=%mytype_size(x)
    [p,n]=size(x.tab)
endfunction
//******************************************************

then in scilab console :


//***********************************
-->x=mytype()
 x  =


       x(1)

!mytype  tab  pol  str  !

       x(2)

    1.    3.    1.
    2.    1.    2.

       x(3)

    x

       x(4)

 scilab


-->[p,n]=%mytype_size(x)  // this is the expected result for size(x)
 n  =

    3.
 p  =

    2.

-->[p,n]=size(x)
              !--error 39
Nombre erroné d'arguments d'entrée.


-->size(x)
 ans  =

    4.

//****************************************************


My goal is only to ensure overloading compatibility between mytype and
matrixmytype  like for "double"  size(x) returns [1,1] if x is a scalar
and not a matrix.

Thank's for reading !

Philippe

_______________________________________________
users mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users
Samuel GOUGEON Samuel GOUGEON
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: overloading size for tlist

Hello Philippe,

In Scilab 5, size() is overloadable only for mlist(), not for tlist().
In Scilab 6, it is overloadable for foth.
So, to be compatible with both Scilab 5 and 6, you shall define your
object as a mlist instead of tlist.

Best regards
Samuel

Le 23/07/2017 à 11:43, philippe a écrit :

> Hi to all,
>
> I've created a new type "mytype", represented by tlist, and another type
> "matrixmytype", for matrix of "mytype" object, represented by mlist .
> I've created the function %matrixmytype_size to overload the function
> "size" for "matrixmytype" objects (it works fine) . For compatibility
> reason I would like that size(x), where typeof(x)=='mytype', retrieve
> the value [1,1], but actually size(x) return the size of the tlist for x
>   an "mytype" .
>
>   Let's take a minimal example :
>
> //*****************************************************
> function x=mytype()
>      x=tlist(['mytype' 'tab' 'pol' 'str'],..
>              grand(2,3,'uin',1,3), ..          //x.tab
>              poly(0,'x'), ..                   //x.pol
>              'scilab')                         //x.str
> endfunction
>
> function [p,n]=%mytype_size(x)
>      [p,n]=size(x.tab)
> endfunction
> //******************************************************
>
> then in scilab console :
>
>
> //***********************************
> -->x=mytype()
>   x  =
>
>
>         x(1)
>
> !mytype  tab  pol  str  !
>
>         x(2)
>
>      1.    3.    1.
>      2.    1.    2.
>
>         x(3)
>
>      x
>
>         x(4)
>
>   scilab
>
>
> -->[p,n]=%mytype_size(x)  // this is the expected result for size(x)
>   n  =
>
>      3.
>   p  =
>
>      2.
>
> -->[p,n]=size(x)
>                !--error 39
> Nombre erroné d'arguments d'entrée.
>
>
> -->size(x)
>   ans  =
>
>      4.
>
> //****************************************************
>
>
> My goal is only to ensure overloading compatibility between mytype and
> matrixmytype  like for "double"  size(x) returns [1,1] if x is a scalar
> and not a matrix.
>
> Thank's for reading !
>
> Philippe
>
> _______________________________________________
> users mailing list
> [hidden email]
> http://lists.scilab.org/mailman/listinfo/users


_______________________________________________
users mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users
Philippe Roux Philippe Roux
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: overloading size for tlist

Le 23/07/2017 à 14:09, Samuel Gougeon a écrit :
> Hello Philippe,
>
> In Scilab 5, size() is overloadable only for mlist(), not for tlist().
> In Scilab 6, it is overloadable for foth.
> So, to be compatible with both Scilab 5 and 6, you shall define your
> object as a mlist instead of tlist.

thank's Samuel, I was suspecting that the problem was coming from tlist.
I changed "mytype" to mlist instead of tlist and all works fine.

So now I don't understand what are tlist made for ? I was thinking that
mlist  was dedicated to "matrix of tlist"  but  we can use mlist  for
both matrix/non-matrix , it should be clarified ...

By,

Philippe

_______________________________________________
users mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users
Loading...