summaryrefslogtreecommitdiff
path: root/2.3-1/macros/FunctionAnnotation/FA_SZ_ROW_DIAG_INS_EXT.sci
blob: 1dddfb776315257150af2a9a5b3ecb9744867ccc (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
function outsize = FA_SZ_ROW_DIAG_INS_EXT(insize,val)
//function outsize = FA_SZ_ROW_DIAG_INS_EXT(insize,val)
// -----------------------------------------------------------------
// Get row size of output for diag(insert) function
//
// Input data:
// insize: string specifying the size of first input argument.
// val: string specifying the value of second input argument.
//
// Output data:
// outsize: string containing the size for output argument.
//
// Copyright (C) 2017 - IIT Bombay - FOSSEE
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution.  The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
// Author: Mushir
// Organization: FOSSEE, IIT Bombay
// Email: toolbox@scilab.in
//

// -----------------------------------------------------------------

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

    // val ==> Position value ...,-2,-1,0,1,2....
    //insize ==> insize(1) will give ROW size and insize(2) will give COLUMN size.
    insize = string(insize);
    row_num = eval(insize(1));
    col_num = eval(insize(2));
    val_num = eval(val);
    /////////////////////  FOR INSERT CONDITION //////////////////////////////



    if(row_num == 1)
        if(val_num == 0) then  // For 0th position
            outsize = string(col_num);// ROW size is equal to COLUMN size

        else    // For ....-2,-1,1,2... positions
            outsize = string(col_num+abs(val_num)); 
            //ROW is equal to COLUMN SIZE + position value (i.e for 1*4 matrix and insert position 1 then ROW size is 4+1 = 5 )

        end 
    elseif(col_num == 1)  // if Column size is one 
        if(val_num == 0) then  // For Oth position 
            outsize = string(row_num); // ROW size is equal to ROW size

        else    // ....-2,-1,1,2... positions.
            outsize = string(row_num + abs(val_num));
            //ROW is equal to ROW SIZE + position value (i.e for 4*1 matrix and insert position 1 then ROW size is 4+1 = 5 )     

        end

    /////////////////////////////////////////////////////////////////////////////


    //////////////////////////// FOR EXTRACT CONDITION /////////////////////////

    elseif(row_num == col_num)   // For no. of rows equal to no. of column (R == C)
        if(val_num == 0) then  //For 0th position
            outsize = string(col_num);  // No. of row is equal to column size
        else //For ....-2,-1,1,2... Positions
            outsize = string(col_num-abs(val_num)); //row value is equal to subtraction of column size and absolute value of position (i.e +ve and -ve both position values) 
        end
    elseif(row_num > col_num)     // for no. of rows greater than no. of column (R > C)
        if(val_num == 0) then  // if 0th position 
            outsize = string(col_num); // No. of row is equal to column size
        elseif(val_num > 0) then    // For +ve positions i.e 1,2,3.....
            outsize = string(col_num-abs(val_num));  // No. of row is equal to subtraction of column size and absolute value of +ve postion

        elseif(val_num < 0 ) then // For -ve positions i.e -1,-2,-3
            temp_outsize1 = row_num-abs(val_num); //In this row values are varying for 4*3 matrix there is no repetition of same row values,for 5*3 matrix there is (5-3 = 2) two same row size(i.e 3 and 3) for -1,-2 position and for 6*3 matrix there is (6-3 = 3) three same row size(i.e 3 ,3,3) for -1,-2,-3 position
            if(temp_outsize1 >= col_num) // if temp_outsize1 is greater than equal to column size then
                outsize = string(col_num);   // row size is equal to column 
            else
                outsize = string(row_num-abs(val_num)); // else row size is substractio of row and abosulte value of position(i.e -1,-2,-3)
            end
        end
    elseif(row_num < col_num)  // for no. of rows less than no. of column size
        if(val_num == 0) then      // if 0th position
            outsize = string(row_num); // No. of row is equal to row size
        elseif(val_num > 0) then    // for +ve positions i.e 1,2 3.....
            temp_outsize2 = col_num-abs(val_num);// In this column values are varying for 3*4 matrix there is no repetition of same row values,for 3*5 matrix there is (5-3 =2) two same row size (i.e 3, 3 ) for 1 ,2 position and for 3*6 matrix there is (6-3 = 3) three row size (i.e 3 ,3 ,3) for 1,2 3 position
            if(temp_outsize2 >= row_num) // if temp_outsize2 is greater than equal to row size then
                outsize = string(row_num); // row size is equal to row size
            else
                outsize = string(col_num-abs(val_num)); // else row size substractio of column and absolute value
            end
        elseif(val_num < 0) then  // for -ve positions i.e -1,-2,-3 .. positions
            outsize = string(row_num-abs(val_num));  // row size is substraction of row size and absolute value of position values(-1,-2,-3)
        end

    //////////////////////////////////////////////////////////////////////////////////////
    end

endfunction