summaryrefslogtreecommitdiff
path: root/macros/postpad.sci
blob: f10ea855d88b804180cafacc0717a681f4d73a61 (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
// Copyright (C) 2018 - 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: Abinash Singh Under FOSSEE Internship
// Modifieded by: Abinash Singh Under FOSSEE Internship
// Last Modified on : 3 Feb 2024
// Organization: FOSSEE, IIT Bombay
// Email: toolbox@scilab.in

function res = postpad(x,l,c,dim)
// Calling Sequence :
//     postpad (x, l)
//     postpad (x, l, c)
//     postpad (x, l, c, dim)
// Append the scalar value c to the vector x until it is of length l. If c is not given, a value of 0 is used.
// If length (x) > l, elements from the end of x are removed until a vector of length l is obtained.
// If x is a matrix, elements are appended or removed from each row.
// If the optional argument dim is given, operate along this dimension.
// If dim is larger than the dimensions of x, the result will have dim dimensions.
    
    if nargin < 2 then 
        error("Usage :  postpad(x,l,c(optional),dim(optional))")
    end
    if nargin < 3 then 
        c = 0 ;
    end
    if nargin <= 4 then 
        if size(x,1) == 1 then
            dim = 1 ;
        elseif size(x,2) == 1 then 
            dim = 2 ;
        else
            dim = 2 ; // FIXME dim functionality not implemented
        end
    end
    if l < size(x,dim) then
        error("l must be greater then dimension of x")
    end
    
    select dim
    case 1 then
        res = [x c*ones(size(x,1),l-size(x,2))];
    case 2 then
        res = [x;c*ones(l-size(x,1),size(x,2))];
    end
endfunction

/*
#test for row vectors
postpad([1 2 3 4],6) //passed
postpad([1 ;2 ;3 ;4],6) // passed
postpad([1 2 3 4;5 6 7 8;9 10 11 12],6) // passed
postpad([1 2 ;3 4;5 6],6,-1) //passed
*/