// Copyright (C) 2010 - DIGITEO - Michael Baudin
//
// This file must be used under the terms of the GNU LGPL license.

function errmsg = Checktype ( funname , var , varname , ivar , expectedtype )
  // Generates an error if the given variable is not of expected type.
  //
  // Calling Sequence
  //   errmsg = Checktype ( funname , var , varname , ivar , expectedtype )
  //
  // Parameters
  //   funname : a 1 x 1 matrix of strings, the name of the calling function.
  //   var : a 1 x 1 matrix of valid Scilab data type, the variable
  //   varname : a 1 x 1 matrix of string, the name of the variable
  //   ivar : a 1 x 1 matrix of floating point integers, the index of the input argument in the calling sequence
  //   expectedtype : a n x 1 or 1 x n matrix of strings, the available types for the variable #ivar
  //   errmsg : a 1 x 1 matrix of strings, the error message. If there was no error, the error message is the empty matrix.
  //
  // Description
  // This function is designed to be used to design functions with 
  // input arguments with variable type.
  // We use the typeof function to compute the type of the variable:
  // see help typeof to get the list of all available values for expectedtype.
  //   Last update : 29/07/2010.
  //
  // Examples
  // // The function takes a string argument.
  // function myfunction ( x )
  //   Checktype ( "myfunction" , x , "x" , 1 , "string" )
  //   disp("This is a string")
  // endfunction
  // // Calling sequences which work
  // myfunction ( "Scilab" )
  // // Calling sequences which generate an error
  // myfunction ( 123456 )
  //
  // // The function takes a string or a matrix of doubles argument.
  // function myfunction ( x )
  //   Checktype ( "myfunction" , x , "x" , 1 , [ "string" "constant" ] )
  //   if ( typeof(x) == "string" ) then
  //     disp("This is a matrix of strings")
  //   else
  //     disp("This is a matrix of doubles")
  //   end
  // endfunction
  // // Calling sequences which work
  // myfunction ( "Scilab" )
  // myfunction ( 123456 )
  // // Calling sequences which generate an error
  // myfunction ( uint8(2) )
  //
  // Authors
  //   Michael Baudin - 2010 - DIGITEO
  //

  errmsg = []
  if ( and ( typeof ( var ) <> expectedtype ) ) then
    strexp = """" + strcat(expectedtype,""" or """) + """"
    errmsg = msprintf(gettext("%s: Expected type [%s] for input argument %s at input #%d, but got ""%s"" instead."),funname, strexp, varname , ivar , typeof(var) );
    error(errmsg);
  end
endfunction



