Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/math/octonion.hpp @ 101:c530137014c0
Update Boost headers (1.58.0)
author | Chris Cannam |
---|---|
date | Mon, 07 Sep 2015 11:12:49 +0100 |
parents | 2665513ce2d3 |
children |
comparison
equal
deleted
inserted
replaced
100:793467b5e61c | 101:c530137014c0 |
---|---|
16 | 16 |
17 namespace boost | 17 namespace boost |
18 { | 18 { |
19 namespace math | 19 namespace math |
20 { | 20 { |
21 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
22 // gcc 2.95.x uses expression templates for valarray calculations, but | |
23 // the result is not conforming. We need BOOST_GET_VALARRAY to get an | |
24 // actual valarray result when we need to call a member function | |
25 #define BOOST_GET_VALARRAY(T,x) ::std::valarray<T>(x) | |
26 // gcc 2.95.x has an "std::ios" class that is similar to | |
27 // "std::ios_base", so we just use a #define | |
28 #define BOOST_IOS_BASE ::std::ios | |
29 // gcc 2.x ignores function scope using declarations, | |
30 // put them in the scope of the enclosing namespace instead: | |
31 using ::std::valarray; | |
32 using ::std::sqrt; | |
33 using ::std::cos; | |
34 using ::std::sin; | |
35 using ::std::exp; | |
36 using ::std::cosh; | |
37 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
38 | 21 |
39 #define BOOST_OCTONION_ACCESSOR_GENERATOR(type) \ | 22 #define BOOST_OCTONION_ACCESSOR_GENERATOR(type) \ |
40 type real() const \ | 23 type real() const \ |
41 { \ | 24 { \ |
42 return(a); \ | 25 return(a); \ |
956 d /= rhs; \ | 939 d /= rhs; \ |
957 \ | 940 \ |
958 return(*this); \ | 941 return(*this); \ |
959 } | 942 } |
960 | 943 |
961 #if defined(__GNUC__) && (__GNUC__ < 3) | 944 #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) |
962 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \ | |
963 octonion<type> & operator /= (::std::complex<type> const & rhs) \ | |
964 { \ | |
965 using ::std::valarray; \ | |
966 \ | |
967 valarray<type> tr(2); \ | |
968 \ | |
969 tr[0] = rhs.real(); \ | |
970 tr[1] = rhs.imag(); \ | |
971 \ | |
972 type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)(); \ | |
973 \ | |
974 tr *= mixam; \ | |
975 \ | |
976 valarray<type> tt(8); \ | |
977 \ | |
978 tt[0] = +a*tr[0]-b*tr[1]; \ | |
979 tt[1] = -a*tr[1]+b*tr[0]; \ | |
980 tt[2] = +c*tr[0]-d*tr[1]; \ | |
981 tt[3] = +c*tr[1]+d*tr[0]; \ | |
982 tt[4] = +e*tr[0]-f*tr[1]; \ | |
983 tt[5] = +e*tr[1]+f*tr[0]; \ | |
984 tt[6] = +g*tr[0]+h*tr[1]; \ | |
985 tt[7] = +g*tr[1]+h*tr[0]; \ | |
986 \ | |
987 tr *= tr; \ | |
988 \ | |
989 tt *= (mixam/tr.sum()); \ | |
990 \ | |
991 a = tt[0]; \ | |
992 b = tt[1]; \ | |
993 c = tt[2]; \ | |
994 d = tt[3]; \ | |
995 e = tt[4]; \ | |
996 f = tt[5]; \ | |
997 g = tt[6]; \ | |
998 h = tt[7]; \ | |
999 \ | |
1000 return(*this); \ | |
1001 } | |
1002 #elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) | |
1003 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \ | 945 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \ |
1004 octonion<type> & operator /= (::std::complex<type> const & rhs) \ | 946 octonion<type> & operator /= (::std::complex<type> const & rhs) \ |
1005 { \ | 947 { \ |
1006 using ::std::valarray; \ | 948 using ::std::valarray; \ |
1007 using ::std::abs; \ | 949 using ::std::abs; \ |
1080 g = tt[6]; \ | 1022 g = tt[6]; \ |
1081 h = tt[7]; \ | 1023 h = tt[7]; \ |
1082 \ | 1024 \ |
1083 return(*this); \ | 1025 return(*this); \ |
1084 } | 1026 } |
1085 #endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ | 1027 #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ |
1086 | 1028 |
1087 #if defined(__GNUC__) && (__GNUC__ < 3) | 1029 #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) |
1088 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \ | |
1089 octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \ | |
1090 { \ | |
1091 using ::std::valarray; \ | |
1092 \ | |
1093 valarray<type> tr(4); \ | |
1094 \ | |
1095 tr[0] = static_cast<type>(rhs.R_component_1()); \ | |
1096 tr[1] = static_cast<type>(rhs.R_component_2()); \ | |
1097 tr[2] = static_cast<type>(rhs.R_component_3()); \ | |
1098 tr[3] = static_cast<type>(rhs.R_component_4()); \ | |
1099 \ | |
1100 type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)();\ | |
1101 \ | |
1102 tr *= mixam; \ | |
1103 \ | |
1104 valarray<type> tt(8); \ | |
1105 \ | |
1106 tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \ | |
1107 tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \ | |
1108 tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \ | |
1109 tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \ | |
1110 tt[4] = +e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \ | |
1111 tt[5] = +e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \ | |
1112 tt[6] = +e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \ | |
1113 tt[7] = +e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \ | |
1114 \ | |
1115 tr *= tr; \ | |
1116 \ | |
1117 tt *= (mixam/tr.sum()); \ | |
1118 \ | |
1119 a = tt[0]; \ | |
1120 b = tt[1]; \ | |
1121 c = tt[2]; \ | |
1122 d = tt[3]; \ | |
1123 e = tt[4]; \ | |
1124 f = tt[5]; \ | |
1125 g = tt[6]; \ | |
1126 h = tt[7]; \ | |
1127 \ | |
1128 return(*this); \ | |
1129 } | |
1130 #elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) | |
1131 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \ | 1030 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \ |
1132 octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \ | 1031 octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \ |
1133 { \ | 1032 { \ |
1134 using ::std::valarray; \ | 1033 using ::std::valarray; \ |
1135 using ::std::abs; \ | 1034 using ::std::abs; \ |
1212 g = tt[6]; \ | 1111 g = tt[6]; \ |
1213 h = tt[7]; \ | 1112 h = tt[7]; \ |
1214 \ | 1113 \ |
1215 return(*this); \ | 1114 return(*this); \ |
1216 } | 1115 } |
1217 #endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ | 1116 #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ |
1218 | 1117 |
1219 #if defined(__GNUC__) && (__GNUC__ < 3) | 1118 #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) |
1220 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \ | |
1221 template<typename X> \ | |
1222 octonion<type> & operator /= (octonion<X> const & rhs) \ | |
1223 { \ | |
1224 using ::std::valarray; \ | |
1225 \ | |
1226 valarray<type> tr(8); \ | |
1227 \ | |
1228 tr[0] = static_cast<type>(rhs.R_component_1()); \ | |
1229 tr[1] = static_cast<type>(rhs.R_component_2()); \ | |
1230 tr[2] = static_cast<type>(rhs.R_component_3()); \ | |
1231 tr[3] = static_cast<type>(rhs.R_component_4()); \ | |
1232 tr[4] = static_cast<type>(rhs.R_component_5()); \ | |
1233 tr[5] = static_cast<type>(rhs.R_component_6()); \ | |
1234 tr[6] = static_cast<type>(rhs.R_component_7()); \ | |
1235 tr[7] = static_cast<type>(rhs.R_component_8()); \ | |
1236 \ | |
1237 type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)();\ | |
1238 \ | |
1239 tr *= mixam; \ | |
1240 \ | |
1241 valarray<type> tt(8); \ | |
1242 \ | |
1243 tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]+e*tr[4]+f*tr[5]+g*tr[6]+h*tr[7]; \ | |
1244 tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]-e*tr[5]+f*tr[4]+g*tr[7]-h*tr[6]; \ | |
1245 tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]-e*tr[6]-f*tr[7]+g*tr[4]+h*tr[5]; \ | |
1246 tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]-e*tr[7]+f*tr[6]-g*tr[5]+h*tr[4]; \ | |
1247 tt[4] = -a*tr[4]+b*tr[5]+c*tr[6]+d*tr[7]+e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \ | |
1248 tt[5] = -a*tr[5]-b*tr[4]+c*tr[7]-d*tr[6]+e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \ | |
1249 tt[6] = -a*tr[6]-b*tr[7]-c*tr[4]+d*tr[5]+e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \ | |
1250 tt[7] = -a*tr[7]+b*tr[6]-c*tr[5]-d*tr[4]+e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \ | |
1251 \ | |
1252 tr *= tr; \ | |
1253 \ | |
1254 tt *= (mixam/tr.sum()); \ | |
1255 \ | |
1256 a = tt[0]; \ | |
1257 b = tt[1]; \ | |
1258 c = tt[2]; \ | |
1259 d = tt[3]; \ | |
1260 e = tt[4]; \ | |
1261 f = tt[5]; \ | |
1262 g = tt[6]; \ | |
1263 h = tt[7]; \ | |
1264 \ | |
1265 return(*this); \ | |
1266 } | |
1267 #elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) | |
1268 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \ | 1119 #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \ |
1269 template<typename X> \ | 1120 template<typename X> \ |
1270 octonion<type> & operator /= (octonion<X> const & rhs) \ | 1121 octonion<type> & operator /= (octonion<X> const & rhs) \ |
1271 { \ | 1122 { \ |
1272 using ::std::valarray; \ | 1123 using ::std::valarray; \ |
1359 g = tt[6]; \ | 1210 g = tt[6]; \ |
1360 h = tt[7]; \ | 1211 h = tt[7]; \ |
1361 \ | 1212 \ |
1362 return(*this); \ | 1213 return(*this); \ |
1363 } | 1214 } |
1364 #endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ | 1215 #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ |
1365 | 1216 |
1366 | 1217 |
1367 #define BOOST_OCTONION_MEMBER_ADD_GENERATOR(type) \ | 1218 #define BOOST_OCTONION_MEMBER_ADD_GENERATOR(type) \ |
1368 BOOST_OCTONION_MEMBER_ADD_GENERATOR_1(type) \ | 1219 BOOST_OCTONION_MEMBER_ADD_GENERATOR_1(type) \ |
1369 BOOST_OCTONION_MEMBER_ADD_GENERATOR_2(type) \ | 1220 BOOST_OCTONION_MEMBER_ADD_GENERATOR_2(type) \ |
1854 #undef BOOST_OCTONION_NOT_EQUAL_GENERATOR | 1705 #undef BOOST_OCTONION_NOT_EQUAL_GENERATOR |
1855 | 1706 |
1856 | 1707 |
1857 // Note: the default values in the constructors of the complex and quaternions make for | 1708 // Note: the default values in the constructors of the complex and quaternions make for |
1858 // a very complex and ambiguous situation; we have made choices to disambiguate. | 1709 // a very complex and ambiguous situation; we have made choices to disambiguate. |
1859 | |
1860 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
1861 template<typename T> | |
1862 ::std::istream & operator >> ( ::std::istream & is, | |
1863 octonion<T>& o) | |
1864 #else | |
1865 template<typename T, typename charT, class traits> | 1710 template<typename T, typename charT, class traits> |
1866 ::std::basic_istream<charT,traits> & operator >> ( ::std::basic_istream<charT,traits> & is, | 1711 ::std::basic_istream<charT,traits> & operator >> ( ::std::basic_istream<charT,traits> & is, |
1867 octonion<T> & o) | 1712 octonion<T> & o) |
1868 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
1869 { | 1713 { |
1870 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
1871 typedef char charT; | |
1872 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
1873 | |
1874 #ifdef BOOST_NO_STD_LOCALE | 1714 #ifdef BOOST_NO_STD_LOCALE |
1875 #else | 1715 #else |
1876 const ::std::ctype<charT> & ct = ::std::use_facet< ::std::ctype<charT> >(is.getloc()); | 1716 const ::std::ctype<charT> & ct = ::std::use_facet< ::std::ctype<charT> >(is.getloc()); |
1877 #endif /* BOOST_NO_STD_LOCALE */ | 1717 #endif /* BOOST_NO_STD_LOCALE */ |
1878 | 1718 |
1986 { | 1826 { |
1987 o = octonion<T>(p,q); | 1827 o = octonion<T>(p,q); |
1988 } | 1828 } |
1989 else // error | 1829 else // error |
1990 { | 1830 { |
1991 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
1992 is.setstate(::std::ios::failbit); | |
1993 #else | |
1994 is.setstate(::std::ios_base::failbit); | 1831 is.setstate(::std::ios_base::failbit); |
1995 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
1996 } | 1832 } |
1997 } | 1833 } |
1998 else // error | 1834 else // error |
1999 { | 1835 { |
2000 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2001 is.setstate(::std::ios::failbit); | |
2002 #else | |
2003 is.setstate(::std::ios_base::failbit); | 1836 is.setstate(::std::ios_base::failbit); |
2004 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2005 } | 1837 } |
2006 } | 1838 } |
2007 else if (cc ==',') // read "((u," | 1839 else if (cc ==',') // read "((u," |
2008 { | 1840 { |
2009 is >> v; // read "((u,v" | 1841 is >> v; // read "((u,v" |
2058 { | 1890 { |
2059 o = octonion<T>(p,q); | 1891 o = octonion<T>(p,q); |
2060 } | 1892 } |
2061 else // error | 1893 else // error |
2062 { | 1894 { |
2063 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2064 is.setstate(::std::ios::failbit); | |
2065 #else | |
2066 is.setstate(::std::ios_base::failbit); | 1895 is.setstate(::std::ios_base::failbit); |
2067 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2068 } | 1896 } |
2069 } | 1897 } |
2070 else // error | 1898 else // error |
2071 { | 1899 { |
2072 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2073 is.setstate(::std::ios::failbit); | |
2074 #else | |
2075 is.setstate(::std::ios_base::failbit); | 1900 is.setstate(::std::ios_base::failbit); |
2076 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2077 } | 1901 } |
2078 } | 1902 } |
2079 else // error | 1903 else // error |
2080 { | 1904 { |
2081 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2082 is.setstate(::std::ios::failbit); | |
2083 #else | |
2084 is.setstate(::std::ios_base::failbit); | 1905 is.setstate(::std::ios_base::failbit); |
2085 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2086 } | 1906 } |
2087 } | 1907 } |
2088 else // error | 1908 else // error |
2089 { | 1909 { |
2090 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2091 is.setstate(::std::ios::failbit); | |
2092 #else | |
2093 is.setstate(::std::ios_base::failbit); | 1910 is.setstate(::std::ios_base::failbit); |
2094 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2095 } | 1911 } |
2096 } | 1912 } |
2097 else // read "((a" | 1913 else // read "((a" |
2098 { | 1914 { |
2099 is.putback(ch); | 1915 is.putback(ch); |
2178 | 1994 |
2179 o = octonion<T>(p,q); | 1995 o = octonion<T>(p,q); |
2180 } | 1996 } |
2181 else // error | 1997 else // error |
2182 { | 1998 { |
2183 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2184 is.setstate(::std::ios::failbit); | |
2185 #else | |
2186 is.setstate(::std::ios_base::failbit); | 1999 is.setstate(::std::ios_base::failbit); |
2187 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2188 } | 2000 } |
2189 } | 2001 } |
2190 else // read "((a),(c" or "((a),(e" | 2002 else // read "((a),(c" or "((a),(e" |
2191 { | 2003 { |
2192 is.putback(ch); | 2004 is.putback(ch); |
2265 { | 2077 { |
2266 o = octonion<T>(u,v,x,y); | 2078 o = octonion<T>(u,v,x,y); |
2267 } | 2079 } |
2268 else // error | 2080 else // error |
2269 { | 2081 { |
2270 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2271 is.setstate(::std::ios::failbit); | |
2272 #else | |
2273 is.setstate(::std::ios_base::failbit); | 2082 is.setstate(::std::ios_base::failbit); |
2274 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2275 } | 2083 } |
2276 } | 2084 } |
2277 else // error | 2085 else // error |
2278 { | 2086 { |
2279 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2280 is.setstate(::std::ios::failbit); | |
2281 #else | |
2282 is.setstate(::std::ios_base::failbit); | 2087 is.setstate(::std::ios_base::failbit); |
2283 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2284 } | 2088 } |
2285 } | 2089 } |
2286 else // error | 2090 else // error |
2287 { | 2091 { |
2288 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2289 is.setstate(::std::ios::failbit); | |
2290 #else | |
2291 is.setstate(::std::ios_base::failbit); | 2092 is.setstate(::std::ios_base::failbit); |
2292 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2293 } | 2093 } |
2294 } | 2094 } |
2295 else if (cc == ',') // read "((a),(c," or "((a),(e," | 2095 else if (cc == ',') // read "((a),(c," or "((a),(e," |
2296 { | 2096 { |
2297 is >> ch; // get the next lexeme | 2097 is >> ch; // get the next lexeme |
2340 { | 2140 { |
2341 o = octonion<T>(p,q); | 2141 o = octonion<T>(p,q); |
2342 } | 2142 } |
2343 else // error | 2143 else // error |
2344 { | 2144 { |
2345 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2346 is.setstate(::std::ios::failbit); | |
2347 #else | |
2348 is.setstate(::std::ios_base::failbit); | 2145 is.setstate(::std::ios_base::failbit); |
2349 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2350 } | 2146 } |
2351 } | 2147 } |
2352 else // error | 2148 else // error |
2353 { | 2149 { |
2354 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2355 is.setstate(::std::ios::failbit); | |
2356 #else | |
2357 is.setstate(::std::ios_base::failbit); | 2150 is.setstate(::std::ios_base::failbit); |
2358 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2359 } | 2151 } |
2360 } | 2152 } |
2361 else // read "((a),(c,d" or "((a),(e,f" | 2153 else // read "((a),(c,d" or "((a),(e,f" |
2362 { | 2154 { |
2363 is.putback(ch); | 2155 is.putback(ch); |
2436 { | 2228 { |
2437 o = octonion<T>(u,v,x,y); | 2229 o = octonion<T>(u,v,x,y); |
2438 } | 2230 } |
2439 else // error | 2231 else // error |
2440 { | 2232 { |
2441 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2442 is.setstate(::std::ios::failbit); | |
2443 #else | |
2444 is.setstate(::std::ios_base::failbit); | 2233 is.setstate(::std::ios_base::failbit); |
2445 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2446 } | 2234 } |
2447 } | 2235 } |
2448 else // error | 2236 else // error |
2449 { | 2237 { |
2450 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2451 is.setstate(::std::ios::failbit); | |
2452 #else | |
2453 is.setstate(::std::ios_base::failbit); | 2238 is.setstate(::std::ios_base::failbit); |
2454 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2455 } | 2239 } |
2456 } | 2240 } |
2457 else // error | 2241 else // error |
2458 { | 2242 { |
2459 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2460 is.setstate(::std::ios::failbit); | |
2461 #else | |
2462 is.setstate(::std::ios_base::failbit); | 2243 is.setstate(::std::ios_base::failbit); |
2463 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2464 } | 2244 } |
2465 } | 2245 } |
2466 else if (cc == ',') // read "((a),(e,f," (ambiguity resolution) | 2246 else if (cc == ',') // read "((a),(e,f," (ambiguity resolution) |
2467 { | 2247 { |
2468 p = ::boost::math::quaternion<T>(a); | 2248 p = ::boost::math::quaternion<T>(a); |
2499 { | 2279 { |
2500 o = octonion<T>(p,q); | 2280 o = octonion<T>(p,q); |
2501 } | 2281 } |
2502 else // error | 2282 else // error |
2503 { | 2283 { |
2504 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2505 is.setstate(::std::ios::failbit); | |
2506 #else | |
2507 is.setstate(::std::ios_base::failbit); | 2284 is.setstate(::std::ios_base::failbit); |
2508 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2509 } | 2285 } |
2510 } | 2286 } |
2511 else if (cc == ',') // read "((a),(e,f,g," | 2287 else if (cc == ',') // read "((a),(e,f,g," |
2512 { | 2288 { |
2513 is >> h; // read "((a),(e,f,g,h" | 2289 is >> h; // read "((a),(e,f,g,h" |
2542 { | 2318 { |
2543 o = octonion<T>(p,q); | 2319 o = octonion<T>(p,q); |
2544 } | 2320 } |
2545 else // error | 2321 else // error |
2546 { | 2322 { |
2547 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2548 is.setstate(::std::ios::failbit); | |
2549 #else | |
2550 is.setstate(::std::ios_base::failbit); | 2323 is.setstate(::std::ios_base::failbit); |
2551 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2552 } | 2324 } |
2553 } | 2325 } |
2554 else // error | 2326 else // error |
2555 { | 2327 { |
2556 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2557 is.setstate(::std::ios::failbit); | |
2558 #else | |
2559 is.setstate(::std::ios_base::failbit); | 2328 is.setstate(::std::ios_base::failbit); |
2560 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2561 } | 2329 } |
2562 } | 2330 } |
2563 else // error | 2331 else // error |
2564 { | 2332 { |
2565 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2566 is.setstate(::std::ios::failbit); | |
2567 #else | |
2568 is.setstate(::std::ios_base::failbit); | 2333 is.setstate(::std::ios_base::failbit); |
2569 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2570 } | 2334 } |
2571 } | 2335 } |
2572 else // error | 2336 else // error |
2573 { | 2337 { |
2574 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2575 is.setstate(::std::ios::failbit); | |
2576 #else | |
2577 is.setstate(::std::ios_base::failbit); | 2338 is.setstate(::std::ios_base::failbit); |
2578 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2579 } | 2339 } |
2580 } | 2340 } |
2581 } | 2341 } |
2582 else // error | 2342 else // error |
2583 { | 2343 { |
2584 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2585 is.setstate(::std::ios::failbit); | |
2586 #else | |
2587 is.setstate(::std::ios_base::failbit); | 2344 is.setstate(::std::ios_base::failbit); |
2588 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2589 } | 2345 } |
2590 } | 2346 } |
2591 } | 2347 } |
2592 else // read "((a),c" (ambiguity resolution) | 2348 else // read "((a),c" (ambiguity resolution) |
2593 { | 2349 { |
2649 { | 2405 { |
2650 o = octonion<T>(a,b,c,d,x.real(),x.imag(),y.real(),y.imag()); | 2406 o = octonion<T>(a,b,c,d,x.real(),x.imag(),y.real(),y.imag()); |
2651 } | 2407 } |
2652 else // error | 2408 else // error |
2653 { | 2409 { |
2654 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2655 is.setstate(::std::ios::failbit); | |
2656 #else | |
2657 is.setstate(::std::ios_base::failbit); | 2410 is.setstate(::std::ios_base::failbit); |
2658 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2659 } | 2411 } |
2660 } | 2412 } |
2661 else // error | 2413 else // error |
2662 { | 2414 { |
2663 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2664 is.setstate(::std::ios::failbit); | |
2665 #else | |
2666 is.setstate(::std::ios_base::failbit); | 2415 is.setstate(::std::ios_base::failbit); |
2667 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2668 } | 2416 } |
2669 } | 2417 } |
2670 else // error | 2418 else // error |
2671 { | 2419 { |
2672 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2673 is.setstate(::std::ios::failbit); | |
2674 #else | |
2675 is.setstate(::std::ios_base::failbit); | 2420 is.setstate(::std::ios_base::failbit); |
2676 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2677 } | 2421 } |
2678 } | 2422 } |
2679 } | 2423 } |
2680 else // error | 2424 else // error |
2681 { | 2425 { |
2682 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2683 is.setstate(::std::ios::failbit); | |
2684 #else | |
2685 is.setstate(::std::ios_base::failbit); | 2426 is.setstate(::std::ios_base::failbit); |
2686 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2687 } | 2427 } |
2688 } | 2428 } |
2689 else if (cc ==',') // read "((a," | 2429 else if (cc ==',') // read "((a," |
2690 { | 2430 { |
2691 is >> ch; // get the next lexeme | 2431 is >> ch; // get the next lexeme |
2756 { | 2496 { |
2757 o = octonion<T>(p,q); | 2497 o = octonion<T>(p,q); |
2758 } | 2498 } |
2759 else // error | 2499 else // error |
2760 { | 2500 { |
2761 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2762 is.setstate(::std::ios::failbit); | |
2763 #else | |
2764 is.setstate(::std::ios_base::failbit); | 2501 is.setstate(::std::ios_base::failbit); |
2765 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2766 } | 2502 } |
2767 } | 2503 } |
2768 else // error | 2504 else // error |
2769 { | 2505 { |
2770 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2771 is.setstate(::std::ios::failbit); | |
2772 #else | |
2773 is.setstate(::std::ios_base::failbit); | 2506 is.setstate(::std::ios_base::failbit); |
2774 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2775 } | 2507 } |
2776 } | 2508 } |
2777 else // error | 2509 else // error |
2778 { | 2510 { |
2779 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2780 is.setstate(::std::ios::failbit); | |
2781 #else | |
2782 is.setstate(::std::ios_base::failbit); | 2511 is.setstate(::std::ios_base::failbit); |
2783 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2784 } | 2512 } |
2785 } | 2513 } |
2786 else | 2514 else |
2787 { | 2515 { |
2788 is.putback(ch); | 2516 is.putback(ch); |
2867 { | 2595 { |
2868 o = octonion<T>(p,q); | 2596 o = octonion<T>(p,q); |
2869 } | 2597 } |
2870 else // error | 2598 else // error |
2871 { | 2599 { |
2872 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2873 is.setstate(::std::ios::failbit); | |
2874 #else | |
2875 is.setstate(::std::ios_base::failbit); | 2600 is.setstate(::std::ios_base::failbit); |
2876 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2877 } | 2601 } |
2878 } | 2602 } |
2879 else // read "((a,b),(c" or "((a,b),(e" | 2603 else // read "((a,b),(c" or "((a,b),(e" |
2880 { | 2604 { |
2881 is.putback(ch); | 2605 is.putback(ch); |
2954 { | 2678 { |
2955 o = octonion<T>(u,v,x,y); | 2679 o = octonion<T>(u,v,x,y); |
2956 } | 2680 } |
2957 else // error | 2681 else // error |
2958 { | 2682 { |
2959 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2960 is.setstate(::std::ios::failbit); | |
2961 #else | |
2962 is.setstate(::std::ios_base::failbit); | 2683 is.setstate(::std::ios_base::failbit); |
2963 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2964 } | 2684 } |
2965 } | 2685 } |
2966 else // error | 2686 else // error |
2967 { | 2687 { |
2968 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2969 is.setstate(::std::ios::failbit); | |
2970 #else | |
2971 is.setstate(::std::ios_base::failbit); | 2688 is.setstate(::std::ios_base::failbit); |
2972 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2973 } | 2689 } |
2974 } | 2690 } |
2975 else // error | 2691 else // error |
2976 { | 2692 { |
2977 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
2978 is.setstate(::std::ios::failbit); | |
2979 #else | |
2980 is.setstate(::std::ios_base::failbit); | 2693 is.setstate(::std::ios_base::failbit); |
2981 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
2982 } | 2694 } |
2983 } | 2695 } |
2984 else if (cc == ',') // read "((a,b),(c," or "((a,b),(e," | 2696 else if (cc == ',') // read "((a,b),(c," or "((a,b),(e," |
2985 { | 2697 { |
2986 is >> ch; // get the next lexeme | 2698 is >> ch; // get the next lexeme |
3031 { | 2743 { |
3032 o = octonion<T>(u,v,x,y); | 2744 o = octonion<T>(u,v,x,y); |
3033 } | 2745 } |
3034 else // error | 2746 else // error |
3035 { | 2747 { |
3036 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3037 is.setstate(::std::ios::failbit); | |
3038 #else | |
3039 is.setstate(::std::ios_base::failbit); | 2748 is.setstate(::std::ios_base::failbit); |
3040 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3041 } | 2749 } |
3042 } | 2750 } |
3043 else // error | 2751 else // error |
3044 { | 2752 { |
3045 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3046 is.setstate(::std::ios::failbit); | |
3047 #else | |
3048 is.setstate(::std::ios_base::failbit); | 2753 is.setstate(::std::ios_base::failbit); |
3049 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3050 } | 2754 } |
3051 } | 2755 } |
3052 else // read "((a,b),(c,d" or "((a,b),(e,f" | 2756 else // read "((a,b),(c,d" or "((a,b),(e,f" |
3053 { | 2757 { |
3054 is.putback(ch); | 2758 is.putback(ch); |
3127 { | 2831 { |
3128 o = octonion<T>(u,v,x,y); | 2832 o = octonion<T>(u,v,x,y); |
3129 } | 2833 } |
3130 else // error | 2834 else // error |
3131 { | 2835 { |
3132 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3133 is.setstate(::std::ios::failbit); | |
3134 #else | |
3135 is.setstate(::std::ios_base::failbit); | 2836 is.setstate(::std::ios_base::failbit); |
3136 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3137 } | 2837 } |
3138 } | 2838 } |
3139 else // error | 2839 else // error |
3140 { | 2840 { |
3141 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3142 is.setstate(::std::ios::failbit); | |
3143 #else | |
3144 is.setstate(::std::ios_base::failbit); | 2841 is.setstate(::std::ios_base::failbit); |
3145 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3146 } | 2842 } |
3147 } | 2843 } |
3148 else // error | 2844 else // error |
3149 { | 2845 { |
3150 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3151 is.setstate(::std::ios::failbit); | |
3152 #else | |
3153 is.setstate(::std::ios_base::failbit); | 2846 is.setstate(::std::ios_base::failbit); |
3154 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3155 } | 2847 } |
3156 } | 2848 } |
3157 else if (cc == ',') // read "((a,b),(e,f," (ambiguity resolution) | 2849 else if (cc == ',') // read "((a,b),(e,f," (ambiguity resolution) |
3158 { | 2850 { |
3159 p = ::boost::math::quaternion<T>(a,b); // too late to backtrack | 2851 p = ::boost::math::quaternion<T>(a,b); // too late to backtrack |
3190 | 2882 |
3191 o = octonion<T>(p,q); | 2883 o = octonion<T>(p,q); |
3192 } | 2884 } |
3193 else // error | 2885 else // error |
3194 { | 2886 { |
3195 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3196 is.setstate(::std::ios::failbit); | |
3197 #else | |
3198 is.setstate(::std::ios_base::failbit); | 2887 is.setstate(::std::ios_base::failbit); |
3199 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3200 } | 2888 } |
3201 } | 2889 } |
3202 else if (cc == ',') // read "((a,b),(e,f,g," | 2890 else if (cc == ',') // read "((a,b),(e,f,g," |
3203 { | 2891 { |
3204 is >> h; // read "((a,b),(e,f,g,h" | 2892 is >> h; // read "((a,b),(e,f,g,h" |
3233 | 2921 |
3234 o = octonion<T>(p,q); | 2922 o = octonion<T>(p,q); |
3235 } | 2923 } |
3236 else // error | 2924 else // error |
3237 { | 2925 { |
3238 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3239 is.setstate(::std::ios::failbit); | |
3240 #else | |
3241 is.setstate(::std::ios_base::failbit); | 2926 is.setstate(::std::ios_base::failbit); |
3242 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3243 } | 2927 } |
3244 } | 2928 } |
3245 else // error | 2929 else // error |
3246 { | 2930 { |
3247 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3248 is.setstate(::std::ios::failbit); | |
3249 #else | |
3250 is.setstate(::std::ios_base::failbit); | 2931 is.setstate(::std::ios_base::failbit); |
3251 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3252 } | 2932 } |
3253 } | 2933 } |
3254 else // error | 2934 else // error |
3255 { | 2935 { |
3256 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3257 is.setstate(::std::ios::failbit); | |
3258 #else | |
3259 is.setstate(::std::ios_base::failbit); | 2936 is.setstate(::std::ios_base::failbit); |
3260 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3261 } | 2937 } |
3262 } | 2938 } |
3263 else // error | 2939 else // error |
3264 { | 2940 { |
3265 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3266 is.setstate(::std::ios::failbit); | |
3267 #else | |
3268 is.setstate(::std::ios_base::failbit); | 2941 is.setstate(::std::ios_base::failbit); |
3269 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3270 } | 2942 } |
3271 } | 2943 } |
3272 } | 2944 } |
3273 else // error | 2945 else // error |
3274 { | 2946 { |
3275 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3276 is.setstate(::std::ios::failbit); | |
3277 #else | |
3278 is.setstate(::std::ios_base::failbit); | 2947 is.setstate(::std::ios_base::failbit); |
3279 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3280 } | 2948 } |
3281 } | 2949 } |
3282 } | 2950 } |
3283 else // error | 2951 else // error |
3284 { | 2952 { |
3285 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3286 is.setstate(::std::ios::failbit); | |
3287 #else | |
3288 is.setstate(::std::ios_base::failbit); | 2953 is.setstate(::std::ios_base::failbit); |
3289 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3290 } | 2954 } |
3291 } | 2955 } |
3292 else // error | 2956 else // error |
3293 { | 2957 { |
3294 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3295 is.setstate(::std::ios::failbit); | |
3296 #else | |
3297 is.setstate(::std::ios_base::failbit); | 2958 is.setstate(::std::ios_base::failbit); |
3298 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3299 } | 2959 } |
3300 } | 2960 } |
3301 else if (cc == ',') // read "((a,b," | 2961 else if (cc == ',') // read "((a,b," |
3302 { | 2962 { |
3303 is >> c; // read "((a,b,c" | 2963 is >> c; // read "((a,b,c" |
3352 { | 3012 { |
3353 o = octonion<T>(p,q); | 3013 o = octonion<T>(p,q); |
3354 } | 3014 } |
3355 else // error | 3015 else // error |
3356 { | 3016 { |
3357 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3358 is.setstate(::std::ios::failbit); | |
3359 #else | |
3360 is.setstate(::std::ios_base::failbit); | 3017 is.setstate(::std::ios_base::failbit); |
3361 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3362 } | 3018 } |
3363 } | 3019 } |
3364 else // error | 3020 else // error |
3365 { | 3021 { |
3366 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3367 is.setstate(::std::ios::failbit); | |
3368 #else | |
3369 is.setstate(::std::ios_base::failbit); | 3022 is.setstate(::std::ios_base::failbit); |
3370 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3371 } | 3023 } |
3372 } | 3024 } |
3373 else if (cc == ',') // read "((a,b,c," | 3025 else if (cc == ',') // read "((a,b,c," |
3374 { | 3026 { |
3375 is >> d; // read "((a,b,c,d" | 3027 is >> d; // read "((a,b,c,d" |
3424 { | 3076 { |
3425 o = octonion<T>(p,q); | 3077 o = octonion<T>(p,q); |
3426 } | 3078 } |
3427 else // error | 3079 else // error |
3428 { | 3080 { |
3429 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3430 is.setstate(::std::ios::failbit); | |
3431 #else | |
3432 is.setstate(::std::ios_base::failbit); | 3081 is.setstate(::std::ios_base::failbit); |
3433 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3434 } | 3082 } |
3435 } | 3083 } |
3436 else // error | 3084 else // error |
3437 { | 3085 { |
3438 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3439 is.setstate(::std::ios::failbit); | |
3440 #else | |
3441 is.setstate(::std::ios_base::failbit); | 3086 is.setstate(::std::ios_base::failbit); |
3442 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3443 } | 3087 } |
3444 } | 3088 } |
3445 else // error | 3089 else // error |
3446 { | 3090 { |
3447 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3448 is.setstate(::std::ios::failbit); | |
3449 #else | |
3450 is.setstate(::std::ios_base::failbit); | 3091 is.setstate(::std::ios_base::failbit); |
3451 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3452 } | 3092 } |
3453 } | 3093 } |
3454 else // error | 3094 else // error |
3455 { | 3095 { |
3456 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3457 is.setstate(::std::ios::failbit); | |
3458 #else | |
3459 is.setstate(::std::ios_base::failbit); | 3096 is.setstate(::std::ios_base::failbit); |
3460 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3461 } | 3097 } |
3462 } | 3098 } |
3463 else // error | 3099 else // error |
3464 { | 3100 { |
3465 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3466 is.setstate(::std::ios::failbit); | |
3467 #else | |
3468 is.setstate(::std::ios_base::failbit); | 3101 is.setstate(::std::ios_base::failbit); |
3469 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3470 } | 3102 } |
3471 } | 3103 } |
3472 } | 3104 } |
3473 else // error | 3105 else // error |
3474 { | 3106 { |
3475 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3476 is.setstate(::std::ios::failbit); | |
3477 #else | |
3478 is.setstate(::std::ios_base::failbit); | 3107 is.setstate(::std::ios_base::failbit); |
3479 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3480 } | 3108 } |
3481 } | 3109 } |
3482 } | 3110 } |
3483 else // read "(a" | 3111 else // read "(a" |
3484 { | 3112 { |
3552 { | 3180 { |
3553 o = octonion<T>(p,q); | 3181 o = octonion<T>(p,q); |
3554 } | 3182 } |
3555 else // error | 3183 else // error |
3556 { | 3184 { |
3557 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3558 is.setstate(::std::ios::failbit); | |
3559 #else | |
3560 is.setstate(::std::ios_base::failbit); | 3185 is.setstate(::std::ios_base::failbit); |
3561 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3562 } | 3186 } |
3563 } | 3187 } |
3564 else // read "(a,(c" or "(a,(e" | 3188 else // read "(a,(c" or "(a,(e" |
3565 { | 3189 { |
3566 is.putback(ch); | 3190 is.putback(ch); |
3639 { | 3263 { |
3640 o = octonion<T>(u,v,x,y); | 3264 o = octonion<T>(u,v,x,y); |
3641 } | 3265 } |
3642 else // error | 3266 else // error |
3643 { | 3267 { |
3644 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3645 is.setstate(::std::ios::failbit); | |
3646 #else | |
3647 is.setstate(::std::ios_base::failbit); | 3268 is.setstate(::std::ios_base::failbit); |
3648 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3649 } | 3269 } |
3650 } | 3270 } |
3651 else // error | 3271 else // error |
3652 { | 3272 { |
3653 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3654 is.setstate(::std::ios::failbit); | |
3655 #else | |
3656 is.setstate(::std::ios_base::failbit); | 3273 is.setstate(::std::ios_base::failbit); |
3657 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3658 } | 3274 } |
3659 } | 3275 } |
3660 else // error | 3276 else // error |
3661 { | 3277 { |
3662 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3663 is.setstate(::std::ios::failbit); | |
3664 #else | |
3665 is.setstate(::std::ios_base::failbit); | 3278 is.setstate(::std::ios_base::failbit); |
3666 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3667 } | 3279 } |
3668 } | 3280 } |
3669 else if (cc == ',') // read "(a,(c," or "(a,(e," | 3281 else if (cc == ',') // read "(a,(c," or "(a,(e," |
3670 { | 3282 { |
3671 is >> ch; // get the next lexeme | 3283 is >> ch; // get the next lexeme |
3716 { | 3328 { |
3717 o = octonion<T>(u,v,x,y); | 3329 o = octonion<T>(u,v,x,y); |
3718 } | 3330 } |
3719 else // error | 3331 else // error |
3720 { | 3332 { |
3721 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3722 is.setstate(::std::ios::failbit); | |
3723 #else | |
3724 is.setstate(::std::ios_base::failbit); | 3333 is.setstate(::std::ios_base::failbit); |
3725 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3726 } | 3334 } |
3727 } | 3335 } |
3728 else // error | 3336 else // error |
3729 { | 3337 { |
3730 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3731 is.setstate(::std::ios::failbit); | |
3732 #else | |
3733 is.setstate(::std::ios_base::failbit); | 3338 is.setstate(::std::ios_base::failbit); |
3734 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3735 } | 3339 } |
3736 } | 3340 } |
3737 else // read "(a,(c,d" or "(a,(e,f" | 3341 else // read "(a,(c,d" or "(a,(e,f" |
3738 { | 3342 { |
3739 is.putback(ch); | 3343 is.putback(ch); |
3812 { | 3416 { |
3813 o = octonion<T>(u,v,x,y); | 3417 o = octonion<T>(u,v,x,y); |
3814 } | 3418 } |
3815 else // error | 3419 else // error |
3816 { | 3420 { |
3817 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3818 is.setstate(::std::ios::failbit); | |
3819 #else | |
3820 is.setstate(::std::ios_base::failbit); | 3421 is.setstate(::std::ios_base::failbit); |
3821 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3822 } | 3422 } |
3823 } | 3423 } |
3824 else // error | 3424 else // error |
3825 { | 3425 { |
3826 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3827 is.setstate(::std::ios::failbit); | |
3828 #else | |
3829 is.setstate(::std::ios_base::failbit); | 3426 is.setstate(::std::ios_base::failbit); |
3830 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3831 } | 3427 } |
3832 } | 3428 } |
3833 else // error | 3429 else // error |
3834 { | 3430 { |
3835 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3836 is.setstate(::std::ios::failbit); | |
3837 #else | |
3838 is.setstate(::std::ios_base::failbit); | 3431 is.setstate(::std::ios_base::failbit); |
3839 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3840 } | 3432 } |
3841 } | 3433 } |
3842 else if (cc == ',') // read "(a,(e,f," (ambiguity resolution) | 3434 else if (cc == ',') // read "(a,(e,f," (ambiguity resolution) |
3843 { | 3435 { |
3844 p = ::boost::math::quaternion<T>(a); | 3436 p = ::boost::math::quaternion<T>(a); |
3875 | 3467 |
3876 o = octonion<T>(p,q); | 3468 o = octonion<T>(p,q); |
3877 } | 3469 } |
3878 else // error | 3470 else // error |
3879 { | 3471 { |
3880 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3881 is.setstate(::std::ios::failbit); | |
3882 #else | |
3883 is.setstate(::std::ios_base::failbit); | 3472 is.setstate(::std::ios_base::failbit); |
3884 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3885 } | 3473 } |
3886 } | 3474 } |
3887 else if (cc == ',') // read "(a,(e,f,g," | 3475 else if (cc == ',') // read "(a,(e,f,g," |
3888 { | 3476 { |
3889 is >> h; // read "(a,(e,f,g,h" | 3477 is >> h; // read "(a,(e,f,g,h" |
3918 | 3506 |
3919 o = octonion<T>(p,q); | 3507 o = octonion<T>(p,q); |
3920 } | 3508 } |
3921 else // error | 3509 else // error |
3922 { | 3510 { |
3923 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3924 is.setstate(::std::ios::failbit); | |
3925 #else | |
3926 is.setstate(::std::ios_base::failbit); | 3511 is.setstate(::std::ios_base::failbit); |
3927 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3928 } | 3512 } |
3929 } | 3513 } |
3930 else // error | 3514 else // error |
3931 { | 3515 { |
3932 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3933 is.setstate(::std::ios::failbit); | |
3934 #else | |
3935 is.setstate(::std::ios_base::failbit); | 3516 is.setstate(::std::ios_base::failbit); |
3936 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3937 } | 3517 } |
3938 } | 3518 } |
3939 else // error | 3519 else // error |
3940 { | 3520 { |
3941 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3942 is.setstate(::std::ios::failbit); | |
3943 #else | |
3944 is.setstate(::std::ios_base::failbit); | 3521 is.setstate(::std::ios_base::failbit); |
3945 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3946 } | 3522 } |
3947 } | 3523 } |
3948 else // error | 3524 else // error |
3949 { | 3525 { |
3950 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3951 is.setstate(::std::ios::failbit); | |
3952 #else | |
3953 is.setstate(::std::ios_base::failbit); | 3526 is.setstate(::std::ios_base::failbit); |
3954 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3955 } | 3527 } |
3956 } | 3528 } |
3957 } | 3529 } |
3958 else // error | 3530 else // error |
3959 { | 3531 { |
3960 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
3961 is.setstate(::std::ios::failbit); | |
3962 #else | |
3963 is.setstate(::std::ios_base::failbit); | 3532 is.setstate(::std::ios_base::failbit); |
3964 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
3965 } | 3533 } |
3966 } | 3534 } |
3967 } | 3535 } |
3968 else // read "(a,b" or "(a,c" (ambiguity resolution) | 3536 else // read "(a,b" or "(a,c" (ambiguity resolution) |
3969 { | 3537 { |
4045 { | 3613 { |
4046 o = octonion<T>(u,v,x,y); | 3614 o = octonion<T>(u,v,x,y); |
4047 } | 3615 } |
4048 else // error | 3616 else // error |
4049 { | 3617 { |
4050 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4051 is.setstate(::std::ios::failbit); | |
4052 #else | |
4053 is.setstate(::std::ios_base::failbit); | 3618 is.setstate(::std::ios_base::failbit); |
4054 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4055 } | 3619 } |
4056 } | 3620 } |
4057 else // error | 3621 else // error |
4058 { | 3622 { |
4059 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4060 is.setstate(::std::ios::failbit); | |
4061 #else | |
4062 is.setstate(::std::ios_base::failbit); | 3623 is.setstate(::std::ios_base::failbit); |
4063 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4064 } | 3624 } |
4065 } | 3625 } |
4066 else // read "(a,b,c" or "(a,c,e" | 3626 else // read "(a,b,c" or "(a,c,e" |
4067 { | 3627 { |
4068 is.putback(ch); | 3628 is.putback(ch); |
4125 { | 3685 { |
4126 o = octonion<T>(u,v,x,y); | 3686 o = octonion<T>(u,v,x,y); |
4127 } | 3687 } |
4128 else // error | 3688 else // error |
4129 { | 3689 { |
4130 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4131 is.setstate(::std::ios::failbit); | |
4132 #else | |
4133 is.setstate(::std::ios_base::failbit); | 3690 is.setstate(::std::ios_base::failbit); |
4134 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4135 } | 3691 } |
4136 } | 3692 } |
4137 else // read "(a,b,c,d" (ambiguity resolution) | 3693 else // read "(a,b,c,d" (ambiguity resolution) |
4138 { | 3694 { |
4139 is.putback(ch); // we backtrack | 3695 is.putback(ch); // we backtrack |
4236 { | 3792 { |
4237 o = octonion<T>(a,b,c,d,e,f,g,h); | 3793 o = octonion<T>(a,b,c,d,e,f,g,h); |
4238 } | 3794 } |
4239 else // error | 3795 else // error |
4240 { | 3796 { |
4241 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4242 is.setstate(::std::ios::failbit); | |
4243 #else | |
4244 is.setstate(::std::ios_base::failbit); | 3797 is.setstate(::std::ios_base::failbit); |
4245 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4246 } | 3798 } |
4247 } | 3799 } |
4248 else // error | 3800 else // error |
4249 { | 3801 { |
4250 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4251 is.setstate(::std::ios::failbit); | |
4252 #else | |
4253 is.setstate(::std::ios_base::failbit); | 3802 is.setstate(::std::ios_base::failbit); |
4254 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4255 } | 3803 } |
4256 } | 3804 } |
4257 else // error | 3805 else // error |
4258 { | 3806 { |
4259 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4260 is.setstate(::std::ios::failbit); | |
4261 #else | |
4262 is.setstate(::std::ios_base::failbit); | 3807 is.setstate(::std::ios_base::failbit); |
4263 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4264 } | 3808 } |
4265 } | 3809 } |
4266 else // error | 3810 else // error |
4267 { | 3811 { |
4268 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4269 is.setstate(::std::ios::failbit); | |
4270 #else | |
4271 is.setstate(::std::ios_base::failbit); | 3812 is.setstate(::std::ios_base::failbit); |
4272 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4273 } | 3813 } |
4274 } | 3814 } |
4275 else // error | 3815 else // error |
4276 { | 3816 { |
4277 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4278 is.setstate(::std::ios::failbit); | |
4279 #else | |
4280 is.setstate(::std::ios_base::failbit); | 3817 is.setstate(::std::ios_base::failbit); |
4281 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4282 } | 3818 } |
4283 } | 3819 } |
4284 } | 3820 } |
4285 else // error | 3821 else // error |
4286 { | 3822 { |
4287 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4288 is.setstate(::std::ios::failbit); | |
4289 #else | |
4290 is.setstate(::std::ios_base::failbit); | 3823 is.setstate(::std::ios_base::failbit); |
4291 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4292 } | 3824 } |
4293 } | 3825 } |
4294 } | 3826 } |
4295 else // error | 3827 else // error |
4296 { | 3828 { |
4297 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4298 is.setstate(::std::ios::failbit); | |
4299 #else | |
4300 is.setstate(::std::ios_base::failbit); | 3829 is.setstate(::std::ios_base::failbit); |
4301 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4302 } | 3830 } |
4303 } | 3831 } |
4304 } | 3832 } |
4305 else // error | 3833 else // error |
4306 { | 3834 { |
4307 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4308 is.setstate(::std::ios::failbit); | |
4309 #else | |
4310 is.setstate(::std::ios_base::failbit); | 3835 is.setstate(::std::ios_base::failbit); |
4311 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4312 } | 3836 } |
4313 } | 3837 } |
4314 } | 3838 } |
4315 else // format: a | 3839 else // format: a |
4316 { | 3840 { |
4326 finish: | 3850 finish: |
4327 return(is); | 3851 return(is); |
4328 } | 3852 } |
4329 | 3853 |
4330 | 3854 |
4331 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4332 template<typename T> | |
4333 ::std::ostream & operator << ( ::std::ostream & os, | |
4334 octonion<T> const & o) | |
4335 #else | |
4336 template<typename T, typename charT, class traits> | 3855 template<typename T, typename charT, class traits> |
4337 ::std::basic_ostream<charT,traits> & operator << ( ::std::basic_ostream<charT,traits> & os, | 3856 ::std::basic_ostream<charT,traits> & operator << ( ::std::basic_ostream<charT,traits> & os, |
4338 octonion<T> const & o) | 3857 octonion<T> const & o) |
4339 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4340 { | 3858 { |
4341 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4342 ::std::ostringstream s; | |
4343 #else | |
4344 ::std::basic_ostringstream<charT,traits> s; | 3859 ::std::basic_ostringstream<charT,traits> s; |
4345 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4346 | 3860 |
4347 s.flags(os.flags()); | 3861 s.flags(os.flags()); |
4348 #ifdef BOOST_NO_STD_LOCALE | 3862 #ifdef BOOST_NO_STD_LOCALE |
4349 #else | 3863 #else |
4350 s.imbue(os.getloc()); | 3864 s.imbue(os.getloc()); |
4402 using ::std::abs; | 3916 using ::std::abs; |
4403 #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ | 3917 #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ |
4404 | 3918 |
4405 BOOST_OCTONION_VALARRAY_LOADER | 3919 BOOST_OCTONION_VALARRAY_LOADER |
4406 | 3920 |
4407 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4408 return((BOOST_GET_VALARRAY(T, abs(temp)).max)()); | |
4409 #else | |
4410 return((abs(temp).max)()); | 3921 return((abs(temp).max)()); |
4411 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4412 } | 3922 } |
4413 | 3923 |
4414 | 3924 |
4415 template<typename T> | 3925 template<typename T> |
4416 inline T l1(octonion<T> const & o) | 3926 inline T l1(octonion<T> const & o) |
4419 using ::std::abs; | 3929 using ::std::abs; |
4420 #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ | 3930 #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */ |
4421 | 3931 |
4422 BOOST_OCTONION_VALARRAY_LOADER | 3932 BOOST_OCTONION_VALARRAY_LOADER |
4423 | 3933 |
4424 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4425 return(BOOST_GET_VALARRAY(T, abs(temp)).sum()); | |
4426 #else | |
4427 return(abs(temp).sum()); | 3934 return(abs(temp).sum()); |
4428 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4429 } | 3935 } |
4430 | 3936 |
4431 | 3937 |
4432 template<typename T> | 3938 template<typename T> |
4433 inline T abs(const octonion<T> & o) | 3939 inline T abs(const octonion<T> & o) |
4438 | 3944 |
4439 using ::std::sqrt; | 3945 using ::std::sqrt; |
4440 | 3946 |
4441 BOOST_OCTONION_VALARRAY_LOADER | 3947 BOOST_OCTONION_VALARRAY_LOADER |
4442 | 3948 |
4443 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4444 T maxim = (BOOST_GET_VALARRAY(T,abs(temp)).max)(); // overflow protection | |
4445 #else | |
4446 T maxim = (abs(temp).max)(); // overflow protection | 3949 T maxim = (abs(temp).max)(); // overflow protection |
4447 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4448 | 3950 |
4449 if (maxim == static_cast<T>(0)) | 3951 if (maxim == static_cast<T>(0)) |
4450 { | 3952 { |
4451 return(maxim); | 3953 return(maxim); |
4452 } | 3954 } |
4743 } | 4245 } |
4744 } | 4246 } |
4745 } | 4247 } |
4746 } | 4248 } |
4747 | 4249 |
4748 | |
4749 #if BOOST_WORKAROUND(__GNUC__, < 3) | |
4750 #undef BOOST_GET_VALARRAY | |
4751 #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ | |
4752 | |
4753 | |
4754 #endif /* BOOST_OCTONION_HPP */ | 4250 #endif /* BOOST_OCTONION_HPP */ |