Mercurial > octave-nkf
diff liboctave/mx-op-defs.h @ 7189:e8d953d03f6a
[project @ 2007-11-26 20:42:09 by dbateman]
author | dbateman |
---|---|
date | Mon, 26 Nov 2007 20:42:11 +0000 |
parents | a1dbe9d80eee |
children | 82be108cc558 |
line wrap: on
line diff
--- a/liboctave/mx-op-defs.h Mon Nov 26 20:31:25 2007 +0000 +++ b/liboctave/mx-op-defs.h Mon Nov 26 20:42:11 2007 +0000 @@ -1159,6 +1159,95 @@ #endif +#define SND_MINMAX_FCN(FCN, OP, T) \ +T ## NDArray \ +FCN (octave_ ## T d, const T ## NDArray& m) \ +{ \ + dim_vector dv = m.dims (); \ + octave_idx_type nel = dv.numel (); \ +\ + if (nel == 0) \ + return T ## NDArray (dv); \ +\ + T ## NDArray result (dv); \ +\ + for (octave_idx_type i = 0; i < nel; i++) \ + { \ + OCTAVE_QUIT; \ + result (i) = d OP m (i) ? d : m(i); \ + } \ +\ + return result; \ +} + +#define NDS_MINMAX_FCN(FCN, OP, T) \ +T ## NDArray \ +FCN (const T ## NDArray& m, octave_ ## T d) \ +{ \ + dim_vector dv = m.dims (); \ + octave_idx_type nel = dv.numel (); \ +\ + if (nel == 0) \ + return T ## NDArray (dv); \ +\ + T ## NDArray result (dv); \ +\ + for (octave_idx_type i = 0; i < nel; i++) \ + { \ + OCTAVE_QUIT; \ + result (i) = m (i) OP d ? m(i) : d; \ + } \ +\ + return result; \ +} + +#define NDND_MINMAX_FCN(FCN, OP, T) \ +T ## NDArray \ +FCN (const T ## NDArray& a, const T ## NDArray& b) \ +{ \ + dim_vector dv = a.dims (); \ + octave_idx_type nel = dv.numel (); \ +\ + if (dv != b.dims ()) \ + { \ + (*current_liboctave_error_handler) \ + ("two-arg min expecting args of same size"); \ + return T ## NDArray (); \ + } \ +\ + if (nel == 0) \ + return T ## NDArray (dv); \ +\ + T ## NDArray result (dv); \ +\ + for (octave_idx_type i = 0; i < nel; i++) \ + { \ + OCTAVE_QUIT; \ + result (i) = a(i) OP b(i) ? a(i) : b(i); \ + } \ +\ + return result; \ +} + +#define MINMAX_FCNS(T) \ + SND_MINMAX_FCN (min, <, T) \ + NDS_MINMAX_FCN (min, <, T) \ + NDND_MINMAX_FCN (min, <, T) \ + SND_MINMAX_FCN (max, >, T) \ + NDS_MINMAX_FCN (max, >, T) \ + NDND_MINMAX_FCN (max, >, T) + +#define MINMAX_DECLS(T) \ + extern OCTAVE_API T ## NDArray min (octave_ ## T d, const T ## NDArray& m); \ + extern OCTAVE_API T ## NDArray min (const T ## NDArray& m, octave_ ## T d); \ + extern OCTAVE_API T ## NDArray min (const T ## NDArray& a, \ + const T ## NDArray& b); \ + extern OCTAVE_API T ## NDArray max (octave_ ## T d, const T ## NDArray& m); \ + extern OCTAVE_API T ## NDArray max (const T ## NDArray& m, octave_ ## T d); \ + extern OCTAVE_API T ## NDArray max (const T ## NDArray& a, \ + const T ## NDArray& b); + + /* ;;; Local Variables: *** ;;; mode: C++ ***