Mercurial > octave-antonio
comparison liboctave/dNDArray.cc @ 10143:f3c34b518422
simplify pairwise min/max implementations
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 20 Jan 2010 10:58:55 +0100 |
parents | 829e69ec3110 |
children | 4c0cdbe0acca |
comparison
equal
deleted
inserted
replaced
10142:829e69ec3110 | 10143:f3c34b518422 |
---|---|
979 done: | 979 done: |
980 | 980 |
981 return is; | 981 return is; |
982 } | 982 } |
983 | 983 |
984 // FIXME -- it would be nice to share code among the min/max | 984 NDArray |
985 // functions below. | 985 min (double s, const NDArray& m) |
986 | 986 { |
987 #define EMPTY_RETURN_CHECK(T) \ | 987 return do_sm_binary_op<NDArray> (s, m, mx_inline_xmin); |
988 if (nel == 0) \ | 988 } |
989 return T (dv); | 989 |
990 | 990 NDArray |
991 NDArray | 991 min (const NDArray& m, double s) |
992 min (double d, const NDArray& m) | 992 { |
993 { | 993 return do_ms_binary_op<NDArray> (m, s, mx_inline_xmin); |
994 dim_vector dv = m.dims (); | |
995 octave_idx_type nel = dv.numel (); | |
996 | |
997 EMPTY_RETURN_CHECK (NDArray); | |
998 | |
999 NDArray result (dv); | |
1000 | |
1001 for (octave_idx_type i = 0; i < nel; i++) | |
1002 { | |
1003 octave_quit (); | |
1004 result (i) = xmin (d, m (i)); | |
1005 } | |
1006 | |
1007 return result; | |
1008 } | |
1009 | |
1010 NDArray | |
1011 min (const NDArray& m, double d) | |
1012 { | |
1013 dim_vector dv = m.dims (); | |
1014 octave_idx_type nel = dv.numel (); | |
1015 | |
1016 EMPTY_RETURN_CHECK (NDArray); | |
1017 | |
1018 NDArray result (dv); | |
1019 | |
1020 for (octave_idx_type i = 0; i < nel; i++) | |
1021 { | |
1022 octave_quit (); | |
1023 result (i) = xmin (d, m (i)); | |
1024 } | |
1025 | |
1026 return result; | |
1027 } | 994 } |
1028 | 995 |
1029 NDArray | 996 NDArray |
1030 min (const NDArray& a, const NDArray& b) | 997 min (const NDArray& a, const NDArray& b) |
1031 { | 998 { |
1032 dim_vector dv = a.dims (); | 999 return do_mm_binary_op<NDArray> (a, b, mx_inline_xmin, "min"); |
1033 octave_idx_type nel = dv.numel (); | 1000 } |
1034 | 1001 |
1035 if (dv != b.dims ()) | 1002 NDArray |
1036 { | 1003 max (double s, const NDArray& m) |
1037 (*current_liboctave_error_handler) | 1004 { |
1038 ("two-arg min expecting args of same size"); | 1005 return do_sm_binary_op<NDArray> (s, m, mx_inline_xmax); |
1039 return NDArray (); | 1006 } |
1040 } | 1007 |
1041 | 1008 NDArray |
1042 EMPTY_RETURN_CHECK (NDArray); | 1009 max (const NDArray& m, double s) |
1043 | 1010 { |
1044 NDArray result (dv); | 1011 return do_ms_binary_op<NDArray> (m, s, mx_inline_xmax); |
1045 | |
1046 for (octave_idx_type i = 0; i < nel; i++) | |
1047 { | |
1048 octave_quit (); | |
1049 result (i) = xmin (a (i), b (i)); | |
1050 } | |
1051 | |
1052 return result; | |
1053 } | |
1054 | |
1055 NDArray | |
1056 max (double d, const NDArray& m) | |
1057 { | |
1058 dim_vector dv = m.dims (); | |
1059 octave_idx_type nel = dv.numel (); | |
1060 | |
1061 EMPTY_RETURN_CHECK (NDArray); | |
1062 | |
1063 NDArray result (dv); | |
1064 | |
1065 for (octave_idx_type i = 0; i < nel; i++) | |
1066 { | |
1067 octave_quit (); | |
1068 result (i) = xmax (d, m (i)); | |
1069 } | |
1070 | |
1071 return result; | |
1072 } | |
1073 | |
1074 NDArray | |
1075 max (const NDArray& m, double d) | |
1076 { | |
1077 dim_vector dv = m.dims (); | |
1078 octave_idx_type nel = dv.numel (); | |
1079 | |
1080 EMPTY_RETURN_CHECK (NDArray); | |
1081 | |
1082 NDArray result (dv); | |
1083 | |
1084 for (octave_idx_type i = 0; i < nel; i++) | |
1085 { | |
1086 octave_quit (); | |
1087 result (i) = xmax (d, m (i)); | |
1088 } | |
1089 | |
1090 return result; | |
1091 } | 1012 } |
1092 | 1013 |
1093 NDArray | 1014 NDArray |
1094 max (const NDArray& a, const NDArray& b) | 1015 max (const NDArray& a, const NDArray& b) |
1095 { | 1016 { |
1096 dim_vector dv = a.dims (); | 1017 return do_mm_binary_op<NDArray> (a, b, mx_inline_xmax, "max"); |
1097 octave_idx_type nel = dv.numel (); | |
1098 | |
1099 if (dv != b.dims ()) | |
1100 { | |
1101 (*current_liboctave_error_handler) | |
1102 ("two-arg max expecting args of same size"); | |
1103 return NDArray (); | |
1104 } | |
1105 | |
1106 EMPTY_RETURN_CHECK (NDArray); | |
1107 | |
1108 NDArray result (dv); | |
1109 | |
1110 for (octave_idx_type i = 0; i < nel; i++) | |
1111 { | |
1112 octave_quit (); | |
1113 result (i) = xmax (a (i), b (i)); | |
1114 } | |
1115 | |
1116 return result; | |
1117 } | 1018 } |
1118 | 1019 |
1119 NDS_CMP_OPS (NDArray, double) | 1020 NDS_CMP_OPS (NDArray, double) |
1120 NDS_BOOL_OPS (NDArray, double) | 1021 NDS_BOOL_OPS (NDArray, double) |
1121 | 1022 |