overloading

overloading — display, functions and operators overloading capabilities

Description

In scilab, variable display, functions and operators may be defined for new objects using functions (scilab coded or primitives).

Display: The display of new objects defined by tlist structure may be overloaded (the default display is similar to list's one). The overloading function must have no output argument a single input argument. It's name is formed as follow %<tlist_type>_p where %<tlist_type> stands for the first entry of the tlist type component.
Operators: Each operator which is not defined for given operands type may be defined. The overloading function must have a single output argument and one or two inputs according to the number of operands. The function name is formed as follow:

for binary operators: %<first_operand_type>_<op_code>_<second_operand_type>

for unary operators: %<operand_type>_<op_code>

extraction and insertion operators which are n-nary operators are described below.

<operand_type>, <first_operand_type>, <second_operand_type> are sequence of characters associated with each data type as described in the following table:

Table 1. 

data type char code data type char code
constant s boolean b
string c library f
function pointer fptr handle h
integer i list l
function m compiled functionmc
polynomial p sparse sp
boolean sparse spb tlist tlist_type

<op_code> is a single character associated with each operator as described in the following table:

Table 2. 

op char code op char code
' t + a
- s * m
/ r \ l
^ p .* x
./ d .\ q
.*. k ./. y
.\. z : b
*. u /. v
\. w [a,b] c
[a;b] f () extraction e
() insertion i == o
<> n | g
& h .^ j
~ 5 .' 0
< 1 > 2
<= 3 >= 4
   iext E

The overloading function for extraction syntax b=a(i1,...,in) has the following calling sequence: b=%<type_of_a>_e_(i1,...,in,a)

and the syntax [x1,..,xm]=a(i1,...,in) has the following calling sequence: [x1,..,xm]=%<type_of_a>_e_(i1,...,in,a)

The overloading function associated to the insertion syntax a(i1,...,in)=b has the following calling sequence: a=%<type_of_b>_i_<type_of_a>(i1,...,in,b,a).

The E char code may be used for some complex insertion algorithm like x.b(2)=33 where b field is not defined in the structure x. The insertion is automatically decomposed into temp=x.b;temp(2)=33;x.b=temp. The E char code is used for the first step of this algorithm. The E overloading function is very similar to the e's one.

Functions :

Some basic primitive function

may also be overloaded for new data type. When such a function is undefined for a particular data types the function %<type_of_an_argument>_<function_name> is called. User may add in this called function the definition associated with the input data types.

Examples



//DISPLAY
deff('[]=%tab_p(l)','disp([['' '';l(3)] [l(2);string(l(4))]])')
tlist('tab',['a','b'],['x';'y'],rand(2,2))

//OPERATOR
deff('x=%c_a_s(a,b)','x=a+string(b)')
's'+1

//FUNCTION
deff('x=%c_sin(a)','x=''sin(''+a+'')''')
sin('2*x')
   
  

See also

tlist, disp, symbols