メインページ   クラス階層   構成   ファイル一覧   構成メンバ   ファイルメンバ  

oct-inttypes.cc

解説を見る。
00001 /*
00002 
00003 Copyright (C) 2004 John W. Eaton
00004 
00005 This file is part of Octave.
00006 
00007 Octave is free software; you can redistribute it and/or modify it
00008 under the terms of the GNU General Public License as published by the
00009 Free Software Foundation; either version 2, or (at your option) any
00010 later version.
00011 
00012 Octave is distributed in the hope that it will be useful, but WITHOUT
00013 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
00015 for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Octave; see the file COPYING.  If not, write to the Free
00019 Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00020 
00021 */
00022 
00023 #ifdef HAVE_CONFIG_H
00024 #include <config.h>
00025 #endif
00026 
00027 #include "oct-inttypes.h"
00028 
00029 #define INSTANTIATE_INT_DOUBLE_BIN_OP(T, OP) \
00030   template octave_int<T> operator OP (const octave_int<T>&, double)
00031 
00032 #define INSTANTIATE_INT_DOUBLE_BIN_OPS(T) \
00033   INSTANTIATE_INT_DOUBLE_BIN_OP (T, +); \
00034   INSTANTIATE_INT_DOUBLE_BIN_OP (T, -); \
00035   INSTANTIATE_INT_DOUBLE_BIN_OP (T, *); \
00036   INSTANTIATE_INT_DOUBLE_BIN_OP (T, /)
00037 
00038 #define INSTANTIATE_DOUBLE_INT_BIN_OP(T, OP) \
00039   template octave_int<T> operator OP (double, const octave_int<T>&)
00040 
00041 #define INSTANTIATE_DOUBLE_INT_BIN_OPS(T) \
00042   INSTANTIATE_DOUBLE_INT_BIN_OP (T, +); \
00043   INSTANTIATE_DOUBLE_INT_BIN_OP (T, -); \
00044   INSTANTIATE_DOUBLE_INT_BIN_OP (T, *); \
00045   INSTANTIATE_DOUBLE_INT_BIN_OP (T, /)
00046 
00047 #define INSTANTIATE_INT_DOUBLE_CMP_OP(T, OP) \
00048   template bool operator OP (const octave_int<T>&, const double&)
00049 
00050 #define INSTANTIATE_INT_DOUBLE_CMP_OPS(T) \
00051   INSTANTIATE_INT_DOUBLE_CMP_OP (T, <); \
00052   INSTANTIATE_INT_DOUBLE_CMP_OP (T, <=); \
00053   INSTANTIATE_INT_DOUBLE_CMP_OP (T, >=); \
00054   INSTANTIATE_INT_DOUBLE_CMP_OP (T, >); \
00055   INSTANTIATE_INT_DOUBLE_CMP_OP (T, ==); \
00056   INSTANTIATE_INT_DOUBLE_CMP_OP (T, !=)
00057 
00058 #define INSTANTIATE_DOUBLE_INT_CMP_OP(T, OP) \
00059   template bool operator OP (const double&, const octave_int<T>&)
00060 
00061 #define INSTANTIATE_DOUBLE_INT_CMP_OPS(T) \
00062   INSTANTIATE_DOUBLE_INT_CMP_OP (T, <); \
00063   INSTANTIATE_DOUBLE_INT_CMP_OP (T, <=); \
00064   INSTANTIATE_DOUBLE_INT_CMP_OP (T, >=); \
00065   INSTANTIATE_DOUBLE_INT_CMP_OP (T, >); \
00066   INSTANTIATE_DOUBLE_INT_CMP_OP (T, ==); \
00067   INSTANTIATE_DOUBLE_INT_CMP_OP (T, !=)
00068 
00069 #define INSTANTIATE_INT_BITCMP_OP(T, OP) \
00070   template octave_int<T> \
00071   operator OP (const octave_int<T>&, const octave_int<T>&)
00072 
00073 #define INSTANTIATE_INT_BITCMP_OPS(T) \
00074   INSTANTIATE_INT_BITCMP_OP (T, &); \
00075   INSTANTIATE_INT_BITCMP_OP (T, |); \
00076   INSTANTIATE_INT_BITCMP_OP (T, ^)
00077 
00078 #define INSTANTIATE_INTTYPE(T) \
00079   template class octave_int<T>; \
00080   template octave_int<T> pow (const octave_int<T>&, const octave_int<T>&); \
00081   template octave_int<T> pow (double, const octave_int<T>&); \
00082   template octave_int<T> pow (const octave_int<T>&, double b); \
00083   template std::ostream& operator << (std::ostream&, const octave_int<T>&); \
00084   template std::istream& operator >> (std::istream&, octave_int<T>&); \
00085   template octave_int<T> \
00086   bitshift (const octave_int<T>&, int, const octave_int<T>&); \
00087   INSTANTIATE_INT_DOUBLE_BIN_OPS (T); \
00088   INSTANTIATE_DOUBLE_INT_BIN_OPS (T); \
00089   INSTANTIATE_INT_DOUBLE_CMP_OPS (T); \
00090   INSTANTIATE_DOUBLE_INT_CMP_OPS (T); \
00091   INSTANTIATE_INT_BITCMP_OPS (T)
00092 
00093 INSTANTIATE_INTTYPE (octave_int8_t);
00094 INSTANTIATE_INTTYPE (octave_int16_t);
00095 INSTANTIATE_INTTYPE (octave_int32_t);
00096 INSTANTIATE_INTTYPE (octave_int64_t);
00097 
00098 INSTANTIATE_INTTYPE (octave_uint8_t);
00099 INSTANTIATE_INTTYPE (octave_uint16_t);
00100 INSTANTIATE_INTTYPE (octave_uint32_t);
00101 INSTANTIATE_INTTYPE (octave_uint64_t);
00102 
00103 #define INSTANTIATE_INTTYPE_BIN_OP(T1, T2, OP) \
00104   template octave_int<octave_int_binop_traits<T1, T2>::TR> \
00105   operator OP (const octave_int<T1>&, const octave_int<T2>&)
00106 
00107 #define INSTANTIATE_INTTYPE_BIN_OPS(T1, T2) \
00108   INSTANTIATE_INTTYPE_BIN_OP (T1, T2, +); \
00109   INSTANTIATE_INTTYPE_BIN_OP (T1, T2, -); \
00110   INSTANTIATE_INTTYPE_BIN_OP (T1, T2, *); \
00111   INSTANTIATE_INTTYPE_BIN_OP (T1, T2, /)
00112 
00113 INSTANTIATE_INTTYPE_BIN_OPS (octave_int8_t, octave_int8_t);
00114 INSTANTIATE_INTTYPE_BIN_OPS (octave_int8_t, octave_int16_t);
00115 INSTANTIATE_INTTYPE_BIN_OPS (octave_int8_t, octave_int32_t);
00116 INSTANTIATE_INTTYPE_BIN_OPS (octave_int8_t, octave_int64_t);
00117 INSTANTIATE_INTTYPE_BIN_OPS (octave_int8_t, octave_uint8_t);
00118 INSTANTIATE_INTTYPE_BIN_OPS (octave_int8_t, octave_uint16_t);
00119 INSTANTIATE_INTTYPE_BIN_OPS (octave_int8_t, octave_uint32_t);
00120 INSTANTIATE_INTTYPE_BIN_OPS (octave_int8_t, octave_uint64_t);
00121 
00122 INSTANTIATE_INTTYPE_BIN_OPS (octave_int16_t, octave_int8_t);
00123 INSTANTIATE_INTTYPE_BIN_OPS (octave_int16_t, octave_int16_t);
00124 INSTANTIATE_INTTYPE_BIN_OPS (octave_int16_t, octave_int32_t);
00125 INSTANTIATE_INTTYPE_BIN_OPS (octave_int16_t, octave_int64_t);
00126 INSTANTIATE_INTTYPE_BIN_OPS (octave_int16_t, octave_uint8_t);
00127 INSTANTIATE_INTTYPE_BIN_OPS (octave_int16_t, octave_uint16_t);
00128 INSTANTIATE_INTTYPE_BIN_OPS (octave_int16_t, octave_uint32_t);
00129 INSTANTIATE_INTTYPE_BIN_OPS (octave_int16_t, octave_uint64_t);
00130 
00131 INSTANTIATE_INTTYPE_BIN_OPS (octave_int32_t, octave_int8_t);
00132 INSTANTIATE_INTTYPE_BIN_OPS (octave_int32_t, octave_int16_t);
00133 INSTANTIATE_INTTYPE_BIN_OPS (octave_int32_t, octave_int32_t);
00134 INSTANTIATE_INTTYPE_BIN_OPS (octave_int32_t, octave_int64_t);
00135 INSTANTIATE_INTTYPE_BIN_OPS (octave_int32_t, octave_uint8_t);
00136 INSTANTIATE_INTTYPE_BIN_OPS (octave_int32_t, octave_uint16_t);
00137 INSTANTIATE_INTTYPE_BIN_OPS (octave_int32_t, octave_uint32_t);
00138 INSTANTIATE_INTTYPE_BIN_OPS (octave_int32_t, octave_uint64_t);
00139 
00140 INSTANTIATE_INTTYPE_BIN_OPS (octave_int64_t, octave_int8_t);
00141 INSTANTIATE_INTTYPE_BIN_OPS (octave_int64_t, octave_int16_t);
00142 INSTANTIATE_INTTYPE_BIN_OPS (octave_int64_t, octave_int32_t);
00143 INSTANTIATE_INTTYPE_BIN_OPS (octave_int64_t, octave_int64_t);
00144 INSTANTIATE_INTTYPE_BIN_OPS (octave_int64_t, octave_uint8_t);
00145 INSTANTIATE_INTTYPE_BIN_OPS (octave_int64_t, octave_uint16_t);
00146 INSTANTIATE_INTTYPE_BIN_OPS (octave_int64_t, octave_uint32_t);
00147 INSTANTIATE_INTTYPE_BIN_OPS (octave_int64_t, octave_uint64_t);
00148 
00149 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint8_t, octave_int8_t);
00150 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint8_t, octave_int16_t);
00151 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint8_t, octave_int32_t);
00152 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint8_t, octave_int64_t);
00153 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint8_t, octave_uint8_t);
00154 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint8_t, octave_uint16_t);
00155 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint8_t, octave_uint32_t);
00156 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint8_t, octave_uint64_t);
00157 
00158 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint16_t, octave_int8_t);
00159 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint16_t, octave_int16_t);
00160 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint16_t, octave_int32_t);
00161 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint16_t, octave_int64_t);
00162 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint16_t, octave_uint8_t);
00163 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint16_t, octave_uint16_t);
00164 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint16_t, octave_uint32_t);
00165 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint16_t, octave_uint64_t);
00166 
00167 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint32_t, octave_int8_t);
00168 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint32_t, octave_int16_t);
00169 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint32_t, octave_int32_t);
00170 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint32_t, octave_int64_t);
00171 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint32_t, octave_uint8_t);
00172 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint32_t, octave_uint16_t);
00173 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint32_t, octave_uint32_t);
00174 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint32_t, octave_uint64_t);
00175 
00176 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint64_t, octave_int8_t);
00177 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint64_t, octave_int16_t);
00178 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint64_t, octave_int32_t);
00179 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint64_t, octave_int64_t);
00180 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint64_t, octave_uint8_t);
00181 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint64_t, octave_uint16_t);
00182 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint64_t, octave_uint32_t);
00183 INSTANTIATE_INTTYPE_BIN_OPS (octave_uint64_t, octave_uint64_t);
00184 
00185 #define INSTANTIATE_INTTYPE_SHIFT_OP(T, OP) \
00186   template octave_int<T> operator OP (const octave_int<T>&, const int&)
00187 
00188 #define INSTANTIATE_INTTYPE_SHIFT_OPS(T) \
00189   INSTANTIATE_INTTYPE_SHIFT_OP (T, <<); \
00190   INSTANTIATE_INTTYPE_SHIFT_OP (T, >>)
00191 
00192 INSTANTIATE_INTTYPE_SHIFT_OPS (octave_int8_t);
00193 INSTANTIATE_INTTYPE_SHIFT_OPS (octave_int16_t);
00194 INSTANTIATE_INTTYPE_SHIFT_OPS (octave_int32_t);
00195 INSTANTIATE_INTTYPE_SHIFT_OPS (octave_int64_t);
00196 INSTANTIATE_INTTYPE_SHIFT_OPS (octave_uint8_t);
00197 INSTANTIATE_INTTYPE_SHIFT_OPS (octave_uint16_t);
00198 INSTANTIATE_INTTYPE_SHIFT_OPS (octave_uint32_t);
00199 INSTANTIATE_INTTYPE_SHIFT_OPS (octave_uint64_t);
00200 
00201 #define INSTANTIATE_OCTAVE_INT_CMP_OP(OP, T1, T2) \
00202   template bool operator OP (const octave_int<T1>&, const octave_int<T2>&)
00203 
00204 #define INSTANTIATE_OCTAVE_INT_CMP_OPS(T1, T2) \
00205   INSTANTIATE_OCTAVE_INT_CMP_OP (<, T1, T2); \
00206   INSTANTIATE_OCTAVE_INT_CMP_OP (<=, T1, T2); \
00207   INSTANTIATE_OCTAVE_INT_CMP_OP (>=, T1, T2); \
00208   INSTANTIATE_OCTAVE_INT_CMP_OP (>, T1, T2); \
00209   INSTANTIATE_OCTAVE_INT_CMP_OP (==, T1, T2); \
00210   INSTANTIATE_OCTAVE_INT_CMP_OP (!=, T1, T2)
00211 
00212 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int8_t, octave_int8_t);
00213 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int8_t, octave_int16_t);
00214 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int8_t, octave_int32_t);
00215 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int8_t, octave_int64_t);
00216 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int8_t, octave_uint8_t);
00217 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int8_t, octave_uint16_t);
00218 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int8_t, octave_uint32_t);
00219 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int8_t, octave_uint64_t);
00220 
00221 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int16_t, octave_int8_t);
00222 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int16_t, octave_int16_t);
00223 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int16_t, octave_int32_t);
00224 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int16_t, octave_int64_t);
00225 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int16_t, octave_uint8_t);
00226 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int16_t, octave_uint16_t);
00227 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int16_t, octave_uint32_t);
00228 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int16_t, octave_uint64_t);
00229 
00230 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int32_t, octave_int8_t);
00231 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int32_t, octave_int16_t);
00232 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int32_t, octave_int32_t);
00233 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int32_t, octave_int64_t);
00234 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int32_t, octave_uint8_t);
00235 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int32_t, octave_uint16_t);
00236 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int32_t, octave_uint32_t);
00237 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int32_t, octave_uint64_t);
00238 
00239 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int64_t, octave_int8_t);
00240 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int64_t, octave_int16_t);
00241 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int64_t, octave_int32_t);
00242 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int64_t, octave_int64_t);
00243 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int64_t, octave_uint8_t);
00244 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int64_t, octave_uint16_t);
00245 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int64_t, octave_uint32_t);
00246 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_int64_t, octave_uint64_t);
00247 
00248 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint8_t, octave_int8_t);
00249 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint8_t, octave_int16_t);
00250 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint8_t, octave_int32_t);
00251 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint8_t, octave_int64_t);
00252 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint8_t, octave_uint8_t);
00253 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint8_t, octave_uint16_t);
00254 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint8_t, octave_uint32_t);
00255 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint8_t, octave_uint64_t);
00256 
00257 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint16_t, octave_int8_t);
00258 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint16_t, octave_int16_t);
00259 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint16_t, octave_int32_t);
00260 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint16_t, octave_int64_t);
00261 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint16_t, octave_uint8_t);
00262 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint16_t, octave_uint16_t);
00263 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint16_t, octave_uint32_t);
00264 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint16_t, octave_uint64_t);
00265 
00266 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint32_t, octave_int8_t);
00267 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint32_t, octave_int16_t);
00268 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint32_t, octave_int32_t);
00269 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint32_t, octave_int64_t);
00270 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint32_t, octave_uint8_t);
00271 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint32_t, octave_uint16_t);
00272 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint32_t, octave_uint32_t);
00273 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint32_t, octave_uint64_t);
00274 
00275 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint64_t, octave_int8_t);
00276 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint64_t, octave_int16_t);
00277 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint64_t, octave_int32_t);
00278 // INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint64_t, octave_int64_t);
00279 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint64_t, octave_uint8_t);
00280 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint64_t, octave_uint16_t);
00281 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint64_t, octave_uint32_t);
00282 INSTANTIATE_OCTAVE_INT_CMP_OPS (octave_uint64_t, octave_uint64_t);
00283 
00284 // The following apply if the unsigned type is at least as wide as the
00285 // signed type (then we can cast postive signed values to the unsigned
00286 // type and compare).
00287 
00288 #define OCTAVE_US_TYPE1_CMP_OP(OP, LTZ_VAL, UT, ST) \
00289   bool \
00290   operator OP (const octave_int<UT>& lhs, const octave_int<ST>& rhs) \
00291   { \
00292     return rhs.value () < 0 ? LTZ_VAL \
00293       : lhs.value () OP static_cast<UT> (rhs.value ()); \
00294   }
00295 
00296 #define OCTAVE_US_TYPE1_CMP_OPS(UT, ST) \
00297   OCTAVE_US_TYPE1_CMP_OP (<, false, UT, ST) \
00298   OCTAVE_US_TYPE1_CMP_OP (<=, false, UT, ST) \
00299   OCTAVE_US_TYPE1_CMP_OP (>=, true, UT, ST) \
00300   OCTAVE_US_TYPE1_CMP_OP (>, true, UT, ST) \
00301   OCTAVE_US_TYPE1_CMP_OP (==, false, UT, ST) \
00302   OCTAVE_US_TYPE1_CMP_OP (!=, true, UT, ST)
00303 
00304 #define OCTAVE_SU_TYPE1_CMP_OP(OP, LTZ_VAL, ST, UT) \
00305   bool \
00306   operator OP (const octave_int<ST>& lhs, const octave_int<UT>& rhs) \
00307   { \
00308     return lhs.value () < 0 ? LTZ_VAL \
00309       : static_cast<UT> (lhs.value ()) OP rhs.value (); \
00310   }
00311 
00312 #define OCTAVE_SU_TYPE1_CMP_OPS(ST, UT) \
00313   OCTAVE_SU_TYPE1_CMP_OP (<, true, ST, UT) \
00314   OCTAVE_SU_TYPE1_CMP_OP (<=, true, ST, UT) \
00315   OCTAVE_SU_TYPE1_CMP_OP (>=, false, ST, UT) \
00316   OCTAVE_SU_TYPE1_CMP_OP (>, false, ST, UT) \
00317   OCTAVE_SU_TYPE1_CMP_OP (==, false, ST, UT) \
00318   OCTAVE_SU_TYPE1_CMP_OP (!=, true, ST, UT)
00319 
00320 #define OCTAVE_TYPE1_CMP_OPS(UT, ST) \
00321   OCTAVE_US_TYPE1_CMP_OPS (UT, ST) \
00322   OCTAVE_SU_TYPE1_CMP_OPS (ST, UT)
00323 
00324 OCTAVE_TYPE1_CMP_OPS (octave_uint32_t, octave_int8_t)
00325 OCTAVE_TYPE1_CMP_OPS (octave_uint32_t, octave_int16_t)
00326 OCTAVE_TYPE1_CMP_OPS (octave_uint32_t, octave_int32_t)
00327 
00328 OCTAVE_TYPE1_CMP_OPS (octave_uint64_t, octave_int8_t)
00329 OCTAVE_TYPE1_CMP_OPS (octave_uint64_t, octave_int16_t)
00330 OCTAVE_TYPE1_CMP_OPS (octave_uint64_t, octave_int32_t)
00331 OCTAVE_TYPE1_CMP_OPS (octave_uint64_t, octave_int64_t)
00332 
00333 // The following apply if the signed type is wider than the unsigned
00334 // type (then we can cast unsigned values to the signed type and
00335 // compare if the signed value is positive).
00336 
00337 #define OCTAVE_US_TYPE2_CMP_OP(OP, LTZ_VAL, UT, ST) \
00338   bool \
00339   operator OP (const octave_int<UT>& lhs, const octave_int<ST>& rhs) \
00340   { \
00341     return rhs.value () < 0 ? LTZ_VAL \
00342       : static_cast<ST> (lhs.value ()) OP rhs.value (); \
00343   }
00344 
00345 #define OCTAVE_US_TYPE2_CMP_OPS(ST, UT) \
00346   OCTAVE_US_TYPE2_CMP_OP (<, false, ST, UT) \
00347   OCTAVE_US_TYPE2_CMP_OP (<=, false, ST, UT) \
00348   OCTAVE_US_TYPE2_CMP_OP (>=, true, ST, UT) \
00349   OCTAVE_US_TYPE2_CMP_OP (>, true, ST, UT) \
00350   OCTAVE_US_TYPE2_CMP_OP (==, false, ST, UT) \
00351   OCTAVE_US_TYPE2_CMP_OP (!=, true, ST, UT)
00352 
00353 #define OCTAVE_SU_TYPE2_CMP_OP(OP, LTZ_VAL, ST, UT) \
00354   bool \
00355   operator OP (const octave_int<ST>& lhs, const octave_int<UT>& rhs) \
00356   { \
00357     return lhs.value () < 0 ? LTZ_VAL \
00358       : lhs.value () OP static_cast<ST> (rhs.value ()); \
00359   }
00360 
00361 #define OCTAVE_SU_TYPE2_CMP_OPS(ST, UT) \
00362   OCTAVE_SU_TYPE2_CMP_OP (<, true, ST, UT) \
00363   OCTAVE_SU_TYPE2_CMP_OP (<=, true, ST, UT) \
00364   OCTAVE_SU_TYPE2_CMP_OP (>=, false, ST, UT) \
00365   OCTAVE_SU_TYPE2_CMP_OP (>, false, ST, UT) \
00366   OCTAVE_SU_TYPE2_CMP_OP (==, false, ST, UT) \
00367   OCTAVE_SU_TYPE2_CMP_OP (!=, true, ST, UT)
00368 
00369 #define OCTAVE_TYPE2_CMP_OPS(UT, ST) \
00370   OCTAVE_US_TYPE2_CMP_OPS (UT, ST) \
00371   OCTAVE_SU_TYPE2_CMP_OPS (ST, UT)
00372 
00373 OCTAVE_TYPE2_CMP_OPS (octave_uint32_t, octave_int64_t)
00374 
00375 
00376 
00377 /*
00378 ;;; Local Variables: ***
00379 ;;; mode: C++ ***
00380 ;;; End: ***
00381 */

Wed Dec 29 11:52:08 2004に生成されました。 doxygen1.2.18
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送