comparison src/oct-stream.cc @ 5176:10172b519695

[project @ 2005-03-02 19:14:13 by jwe]
author jwe
date Wed, 02 Mar 2005 19:14:14 +0000
parents 1312d3af9eb0
children 2fa6253e36a3
comparison
equal deleted inserted replaced
5175:7a25bb94ef65 5176:10172b519695
1139 1139
1140 #if 0 1140 #if 0
1141 template std::istream& 1141 template std::istream&
1142 octave_scan (std::istream&, const scanf_format_elt&, float*); 1142 octave_scan (std::istream&, const scanf_format_elt&, float*);
1143 #endif 1143 #endif
1144
1145 template <>
1146 std::istream&
1147 octave_scan (std::istream& is, const scanf_format_elt& fmt, double* valptr)
1148 {
1149 double& ref = *valptr;
1150
1151 switch (fmt.type)
1152 {
1153 case 'e':
1154 case 'f':
1155 case 'g':
1156 {
1157 int c1;
1158
1159 while (is && (c1 = is.get ()) != EOF && isspace (c1))
1160 /* skip whitespace */;
1161
1162 if (c1 != EOF)
1163 {
1164 if (c1 == 'N')
1165 {
1166 int c2 = is.get ();
1167
1168 if (c2 != EOF)
1169 {
1170 if (c2 == 'A')
1171 {
1172 int c3 = is.get ();
1173
1174 if (c3 != EOF)
1175 {
1176 is.putback (c3);
1177
1178 if (isspace (c3) || ispunct (c3))
1179 ref = octave_NA;
1180 else
1181 {
1182 is.putback (c2);
1183 is.putback (c1);
1184
1185 is >> ref;
1186 }
1187 }
1188 else
1189 {
1190 is.clear ();
1191
1192 ref = octave_NA;
1193 }
1194 }
1195 else if (c2 == 'a')
1196 {
1197 int c3 = is.get ();
1198
1199 if (c3 != EOF)
1200 {
1201 if (c3 == 'N')
1202 {
1203 int c4 = is.get ();
1204
1205 if (c4 != EOF)
1206 {
1207 is.putback (c4);
1208
1209 if (isspace (c4) || ispunct (c4))
1210 ref = octave_NaN;
1211 else
1212 {
1213 is.putback (c3);
1214 is.putback (c2);
1215 is.putback (c1);
1216
1217 is >> ref;
1218 }
1219 }
1220 else
1221 {
1222 is.clear ();
1223
1224 ref = octave_NaN;
1225 }
1226 }
1227 else
1228 {
1229 is.putback (c3);
1230 is.putback (c2);
1231 is.putback (c1);
1232
1233 is >> ref;
1234 }
1235 }
1236 }
1237 else
1238 {
1239 is.putback (c2);
1240 is.putback (c1);
1241
1242 is >> ref;
1243 }
1244 }
1245 }
1246 else if (c1 == 'I')
1247 {
1248 int c2 = is.get ();
1249
1250 if (c2 != EOF)
1251 {
1252 if (c2 == 'n')
1253 {
1254 int c3 = is.get ();
1255
1256 if (c3 != EOF)
1257
1258 if (c3 == 'f')
1259 {
1260 int c4 = is.get ();
1261
1262 if (c4 != EOF)
1263 {
1264 is.putback (c4);
1265
1266 if (isspace (c4) || ispunct (c4))
1267 ref = octave_Inf;
1268 else
1269 {
1270 is.putback (c3);
1271 is.putback (c2);
1272 is.putback (c1);
1273
1274 is >> ref;
1275 }
1276 }
1277 else
1278 {
1279 is.clear ();
1280
1281 ref = octave_Inf;
1282 }
1283 }
1284 else
1285 {
1286 is.putback (c3);
1287 is.putback (c2);
1288 is.putback (c1);
1289
1290 is >> ref;
1291 }
1292 }
1293 else
1294 {
1295 is.putback (c2);
1296 is.putback (c1);
1297
1298 is >> ref;
1299 }
1300 }
1301 }
1302 else
1303 {
1304 is.putback (c1);
1305
1306 is >> ref;
1307 }
1308 }
1309 }
1310 break;
1311
1312 default:
1313 panic_impossible ();
1314 break;
1315 }
1316
1317 return is;
1318 }
1144 1319
1145 template std::istream& 1320 template std::istream&
1146 octave_scan (std::istream&, const scanf_format_elt&, double*); 1321 octave_scan (std::istream&, const scanf_format_elt&, double*);
1147 1322
1148 #endif 1323 #endif