function [vOutVector, vSuccess] = fVectorOrientation(vVector, vOrientation)
%fVectorOrientation ensures column or row vector orientation
%
% [vOutVector, vSuccess] = fVectorOrientation(vVector, vOrientation)
%
% vOrientation = 'column' : make vVector a column vector
% vOrientation = 'row' : make vVector a row vector
% vOrientation = 'cgr' : make vVector a matrix with column size greater row size
% vOrientation = 'rgc' : make vVector a matrix with column size less than row size
%
% Result = 0 : unsuccessful operation
% Result = 1 : vVector was a scalar
% Result = 2 : vVector was column vector
% Result = 3 : vVector was row vector
% Result = 4 : vVector was matrix with column size greater row size
% Result = 5 : vVector was matrix with column size less than row size
% Result = 6 : vVector was a square matrix
% Result = 7 : vVector was empty
%
% Function for ensuring column or row vector orientation.
%
% Example: [vOutVector, vSuccess] = fVectorOrientation([1, 2, 3], 'column')
%
% Author: Dipl.-Ing. Andr Manfred Strobel
% Copyright: 1999-2001 by DaimlerChrysler AG, FT1/AK
% Matlab: 6.0, R12 (Win)
% Date: 2001/01/15 11:00
% Version: 001.11 * Released * / beta / alpha
% Release: 01.00
vOrientNum = 0; % init orientation number with zero
switch vOrientation
case {'column'}
% return column vector
vOrientNum = 2;
case {'row'}
% return row vector
vOrientNum = 3;
case {'cgr'}
% return column > row
vOrientNum = 4;
case {'rgc'}
% return column < row
vOrientNum = 5;
otherwise
% unspecified orientation
error(['Wrong orientation specified.'])
end % of switch
vSuccess = 0; % first there is no successful operation
vSize = size(vVector); % get size of vVector
if isempty(vVector)
% vVector is empty
vSuccess = 7; % vVector is empty
end % of if
if isequal(vSize(1), 1)
% vVector is a scalar or a row vector
if isequal(vSize(2), 1)
% vVector is a scalar
vSuccess = 1; % vVector is a scalar
else
% vVector is a row vector
vSuccess = 3; % vVector is a row vector
end % of if
elseif isequal(vSize(2), 1)
% vVector is a column vector
vSuccess = 2; % vVector is a column vector
elseif ~isequal(vSuccess, 7)
% vVector is a matrix and not empty
if (vSize(1) > vSize(2))
% column > row
vSuccess = 4;
elseif (vSize(1) < vSize(2))
% column < row
vSuccess = 5;
elseif isequal(vSize(1), vSize(2))
% column == row
vSuccess = 6;
end % of if
end % of if
if isequal(vSuccess, 1)
% vVector is a scalar
vOutVector = vVector; % return the scalar unchanged
elseif isequal(vSuccess, 7)
% vVector is a scalar
vOutVector = vVector; % return the empty vector unchanged
else
% vVector is not a scalar
if isequal(vSuccess, 6)
% vVector is a square matrix
if (isequal(vOrientNum, 4) | isequal(vOrientNum, 5))
% matrix should be returned
vOutVector = vVector; % return the square matrix
elseif isequal(vOrientNum, 2)
% column vector should be returned
warning(['Returned first column of input matrix.'])
vOutVector = vVector(:, 1); % return the first column
elseif isequal(vOrientNum, 3)
% row vector should be returned
warning(['Returned first row of input matrix.'])
vOutVector = vVector(1, :); % return the first column
end % of if
elseif (isequal(vSuccess, 2) | isequal(vSuccess, 3))
% vVector is a vector
if (isequal(vOrientNum, 2) | isequal(vOrientNum, 4))
% matrix column > row
if isequal(vSuccess, 2)
% input column > row
vOutVector = vVector; % return vVector
elseif isequal(vSuccess, 3)
% input column < row
vOutVector = vVector'; % return transposed vVector
end % of if
elseif (isequal(vOrientNum, 3) | isequal(vOrientNum, 5))
% matrix column < row
if isequal(vSuccess, 2)
% input column > row
vOutVector = vVector'; % return transposed vVector
elseif isequal(vSuccess, 3)
% input column < row
vOutVector = vVector; % return vVector
end % of if
end % of if
elseif (isequal(vSuccess, 4) | isequal(vSuccess, 5))
% vVector is a matrix
if isequal(vOrientNum, 2)
% column vector
% warning(['Returned full input matrix.'])
if isequal(vSuccess, 4)
% input column > row
vOutVector = vVector; % return vVector
elseif isequal(vSuccess, 5)
% input column < row
vOutVector = vVector'; % return transposed vVector
end % of if
elseif isequal(vOrientNum, 3)
% row vector
% warning(['Returned full input matrix.'])
if isequal(vSuccess, 4)
% input column > row
vOutVector = vVector'; % return transposed vVector
elseif isequal(vSuccess, 5)
% input column < row
vOutVector = vVector; % return vVector
end % of if
elseif isequal(vOrientNum, 4)
% matrix column > row
if isequal(vSuccess, 4)
% input column > row
vOutVector = vVector; % return vVector
elseif isequal(vSuccess, 5)
% input column < row
vOutVector = vVector'; % return transposed vVector
end % of if
elseif isequal(vOrientNum, 5)
% matrix column < row
if isequal(vSuccess, 4)
% input column > row
vOutVector = vVector'; % return transposed vVector
elseif isequal(vSuccess, 5)
% input column < row
vOutVector = vVector; % return vVector
end % of if
end % of if
end % of if
end % of if