Mercurial > hg > octave-lojdl
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 |