X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=octave_packages%2Fm%2Fdeprecated%2Fdispatch.m;fp=octave_packages%2Fm%2Fdeprecated%2Fdispatch.m;h=6ab53b45eb60658454d62d5bf22c167d52873b76;hb=1c0469ada9531828709108a4882a751d2816994a;hp=0000000000000000000000000000000000000000;hpb=63de9f36673d49121015e3695f2c336ea92bc278;p=CreaPhase.git diff --git a/octave_packages/m/deprecated/dispatch.m b/octave_packages/m/deprecated/dispatch.m new file mode 100644 index 0000000..6ab53b4 --- /dev/null +++ b/octave_packages/m/deprecated/dispatch.m @@ -0,0 +1,103 @@ +## Copyright (C) 2010-2012 John W. Eaton +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Loadable Function} {} dispatch (@var{f}, @var{r}, @var{type}) +## +## Replace the function @var{f} with a dispatch so that function @var{r} +## is called when @var{f} is called with the first argument of the named +## @var{type}. If the type is @var{any} then call @var{r} if no other type +## matches. The original function @var{f} is accessible using +## @code{builtin (@var{f}, @dots{})}. +## +## If @var{r} is omitted, clear dispatch function associated with @var{type}. +## +## If both @var{r} and @var{type} are omitted, list dispatch functions +## for @var{f}. +## @seealso{builtin} +## @end deftypefn + +## Deprecated in version 3.4 + +function varargout = dispatch (varargin) + + persistent warned = false; + if (! warned) + warned = true; + warning ("Octave:deprecated-function", + "dispatch is obsolete and will be removed from a future version of Octave; please use classes instead"); + endif + + varargout = cell (nargout, 1); + [ varargout{:} ] = __dispatch__ (varargin{:}); + +endfunction + + +%!test # builtin function replacement +%! dispatch('sin','length','string') +%! assert(sin("abc"),3) +%! assert(sin(0),0,10*eps); + +%!test # 'any' function +%! dispatch('sin','exp','any') +%! assert(sin(0),1,eps); +%! assert(sin("abc"),3); + +%!test # 'builtin' function +%! assert(builtin('sin',0),0,eps); +%! builtin('eval','x=1;'); +%! assert(x,1); + +%!test # clear function mapping +%! dispatch('sin','string') +%! dispatch('sin','any') +%! assert(sin(0),0,10*eps); + +%!test # oct-file replacement +%! dispatch('fft','length','string') +%! assert(fft([1,1]),[2,0]); +%! assert(fft("abc"),3) +%! dispatch('fft','string'); + +%!test # m-file replacement +%! dispatch('hamming','length','string') +%! assert(hamming(1),1) +%! assert(hamming("abc"),3) +%! dispatch('hamming','string') + +%!test # override preloaded builtin +%! evalin('base','cos(1);'); +%! dispatch('cos','length','string') +%! evalin('base','assert(cos("abc"),3)'); +%! evalin('base','assert(cos(0),1,eps)'); +%! dispatch('cos','string') + +%!test # override pre-loaded oct-file +%! evalin('base','qr(1);'); +%! dispatch('qr','length','string') +%! evalin('base','assert(qr("abc"),3)'); +%! evalin('base','assert(qr(1),1)'); +%! dispatch('qr','string'); + +%!test # override pre-loaded m-file +%! evalin('base','hanning(1);'); +%! dispatch('hanning','length','string') +%! evalin('base','assert(hanning("abc"),3)'); +%! evalin('base','assert(hanning(1),1)'); +%! dispatch('hanning','string');