% mtimesx_sparse does sparse matrix multiply of two inputs
%******************************************************************************
% 
%  MATLAB (R) is a trademark of The Mathworks (R) Corporation
% 
%  Function:    mtimesx_sparse
%  Filename:    mtimesx_sparse.m
%  Programmer:  James Tursa
%  Version:     1.00
%  Date:        September 27, 2009
%  Copyright:   (c) 2009 by James Tursa, All Rights Reserved
%
%  This code uses the BSD License:
%
%  Redistribution and use in source and binary forms, with or without 
%  modification, are permitted provided that the following conditions are 
%  met:
%
%     * Redistributions of source code must retain the above copyright 
%       notice, this list of conditions and the following disclaimer.
%     * Redistributions in binary form must reproduce the above copyright 
%       notice, this list of conditions and the following disclaimer in 
%       the documentation and/or other materials provided with the distribution
%      
%  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
%  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
%  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
%  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
%  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
%  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
%  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
%  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
%  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
%  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
%  POSSIBILITY OF SUCH DAMAGE.
%
%--
%
% mtimesx_sparse is a helper function for mtimesx and is not intended to be called
% directly by the user.
% 
% ---------------------------------------------------------------------------------------------------------------------------------

function result = mtimesx_sparse(a,transa,b,transb)
if( transa == 'N' )
    if( transb == 'N' )
        result = a * b;
    elseif( transb == 'G' )
        result = a * conj(b);
    elseif( transb == 'T' )
        result = a * b.';
    else
        result = a * b';
    end
elseif( transa == 'G' )
    if( transb == 'N' )
        result = conj(a) * b;
    elseif( transb == 'G' )
        result = conj(a) * conj(b);
    elseif( transb == 'T' )
        result = conj(a) * b.';
    else
        result = conj(a) * b';
    end
elseif( transa == 'T' )
    if( transb == 'N' )
        result = a.' * b;
    elseif( transb == 'G' )
        result = a.' * conj(b);
    elseif( transb == 'T' )
        result = a.' * b.';
    else
        result = a.' * b';
    end
else
    if( transb == 'N' )
        result = a' * b;
    elseif( transb == 'G' )
        result = a' * conj(b);
    elseif( transb == 'T' )
        result = a' * b.';
    else
        result = a' * b';
    end
end
end
