summaryrefslogtreecommitdiff
path: root/macros/FunctionAnnotation/FA_SZ_ROW_COLUMN.sci
blob: ca1d262708d34a38fb41538f5839f83812e094e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
function opoutsize = FA_SZ_ROW_COLUMN(in1size,in2size)
// function opoutsize = FA_SZ_OPPLUSA(in1size,in2size)
// -----------------------------------------------------------------
// Returns the size of the output computed by OPPLUS operator 
// restricted to arithmetic operations (string operations not supported.)
// 
// Assuming:
// size(in1) = [in1r,in1c]
// size(in2) = [in2r,in2c]
// size(out) = [outr,outc]
//
// we have the following combinations:
// in1   in2   outr   outc
// -----------------------
//  S     S    in2r   in2c    
//  S     M    in2r   in2c
//  M     S    in1r   in1c
//  M     M    in1r   in1c
//
// Where S means that the input is a scalar
// and M means that the input is a matrix.
// There is also the case related to the string catenation!
// This is the main difference between - and + operators.
//
// Input data:
// in1size: size of input number 1. It is an array of 2 strings. 
//          The first string specifies the number of rows.
//          The second string specifies the number of columns.
// 
// in2size: size of input number 2. It is an array of 2 strings. 
//          The first string specifies the number of rows.
//          The second string specifies the number of columns.
//
// Output data:
// opoutsize: size of output. It is an array of 2 strings. 
//            The first string specifies the number of rows.
//            The second string specifies the number of columns. 
//
// Status:
// 18-Mar-2008 -- Raffaele Nutricato: Author.
// 18-Mar-2008 -- Alberto Morea: Test Ok.
//
// Copyright 2008 Raffaele Nutricato & Alberto Morea.
// Contact: raffaele.nutricato@tiscali.it
// -----------------------------------------------------------------

// ------------------------------
// --- Check input arguments. ---
// ------------------------------
SCI2CNInArgCheck(argn(2),2,2);

// ------------------------
// --- Generate Output. ---
// ------------------------
// --- Get dimensions of input arguments. ---
in1size = string(in1size);
in2size = string(in2size);
in1type = string(in1type);
in2type = string(in2type);
in1dim = GetSymbolDimension(in1size);
in2dim = GetSymbolDimension(in2size);
if (isnum(in2size(2))) then
        if(in2size(2) == '3') then
            in1num_c = eval(in1size(2));
            in1num_r = eval(in2size(1));
            opoutsize(1) = string(in1num_r);
            opoutsize(2) = string(in1num_c);
        else
         
            in2num_r = eval(in1size(1));
            in2num_c = eval(in2size(1));
            opoutsize(1) = string(in2num_r);
            opoutsize(2) = string(in2num_c);
        end
else
        if(in2size(2) == 3)
           opoutsize(2) = '('+string(in1size(2))+')';
         
        else
           opoutsize(1) = '('+string(in1size(1))+')';
           
       end
end

endfunction