Changeset 1323
- Timestamp:
- Apr 30, 2012, 11:30:57 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lol/math/vector.h
r1320 r1323 1237 1237 1238 1238 #define DECLARE_ALL_VECTOR_OPS(type) \ 1239 DECLARE_ALL_VECTOR_OPS_INNER(Vec2, type) \ 1240 DECLARE_ALL_VECTOR_OPS_INNER(Vec3, type) \ 1241 DECLARE_ALL_VECTOR_OPS_INNER(Vec4, type) \ 1242 \ 1243 DECLARE_VEC_3_COERCE_OPS(Vec3, static, type, type, type) 1239 namespace x##type \ 1240 { \ 1241 DECLARE_ALL_VECTOR_OPS_INNER(Vec2, type) \ 1242 DECLARE_ALL_VECTOR_OPS_INNER(Vec3, type) \ 1243 DECLARE_ALL_VECTOR_OPS_INNER(Vec4, type) \ 1244 \ 1245 DECLARE_VEC_3_COERCE_OPS(Vec3, static, type, type, type) \ 1246 } 1244 1247 1245 1248 #define DECLARE_VEC_ANY_COERCE_OPS(tname, tlow, thigh) \ … … 1251 1254 1252 1255 #define DECLARE_ALL_VECTOR_COERCE_OPS(tlow, thigh) \ 1253 DECLARE_VEC_ANY_COERCE_OPS(Vec2, tlow, thigh) \ 1254 DECLARE_VEC_ANY_COERCE_OPS(Vec3, tlow, thigh) \ 1255 DECLARE_VEC_ANY_COERCE_OPS(Vec4, tlow, thigh) \ 1256 \ 1257 DECLARE_VEC_3_COERCE_OPS(Vec3, static, tlow, thigh, thigh) \ 1258 DECLARE_VEC_3_COERCE_OPS(Vec3, static, thigh, tlow, thigh) 1256 namespace x##tlow##thigh \ 1257 { \ 1258 DECLARE_VEC_ANY_COERCE_OPS(Vec2, tlow, thigh) \ 1259 DECLARE_VEC_ANY_COERCE_OPS(Vec3, tlow, thigh) \ 1260 DECLARE_VEC_ANY_COERCE_OPS(Vec4, tlow, thigh) \ 1261 } \ 1262 namespace y##tlow##thigh \ 1263 { \ 1264 DECLARE_VEC_3_COERCE_OPS(Vec3, static, tlow, thigh, thigh) \ 1265 DECLARE_VEC_3_COERCE_OPS(Vec3, static, thigh, tlow, thigh) \ 1266 } \ 1259 1267 1260 1268 DECLARE_ALL_NONVECTOR_OPS(Cmplx) … … 1298 1306 #endif 1299 1307 1308 /* Hack for compilation speedups: we can hide some of our global methods in 1309 * namespaces. We therefore want "long_double" to be a one-symbol type */ 1310 typedef long double long_double; 1311 1300 1312 /* Apply the same coercion rules as in the C++ standard. However, instead 1301 1313 * of always promoting smaller types to int, we allow int8_t op int16_t to … … 1310 1322 DECLARE_ALL_VECTOR_COERCE_OPS(int8_t, float) 1311 1323 DECLARE_ALL_VECTOR_COERCE_OPS(int8_t, double) 1312 DECLARE_ALL_VECTOR_COERCE_OPS(int8_t, long 1324 DECLARE_ALL_VECTOR_COERCE_OPS(int8_t, long_double) 1313 1325 1314 1326 DECLARE_ALL_VECTOR_COERCE_OPS(uint8_t, int16_t) … … 1320 1332 DECLARE_ALL_VECTOR_COERCE_OPS(uint8_t, float) 1321 1333 DECLARE_ALL_VECTOR_COERCE_OPS(uint8_t, double) 1322 DECLARE_ALL_VECTOR_COERCE_OPS(uint8_t, long 1334 DECLARE_ALL_VECTOR_COERCE_OPS(uint8_t, long_double) 1323 1335 1324 1336 DECLARE_ALL_VECTOR_COERCE_OPS(int16_t, uint16_t) … … 1329 1341 DECLARE_ALL_VECTOR_COERCE_OPS(int16_t, float) 1330 1342 DECLARE_ALL_VECTOR_COERCE_OPS(int16_t, double) 1331 DECLARE_ALL_VECTOR_COERCE_OPS(int16_t, long 1343 DECLARE_ALL_VECTOR_COERCE_OPS(int16_t, long_double) 1332 1344 1333 1345 DECLARE_ALL_VECTOR_COERCE_OPS(uint16_t, int32_t) … … 1337 1349 DECLARE_ALL_VECTOR_COERCE_OPS(uint16_t, float) 1338 1350 DECLARE_ALL_VECTOR_COERCE_OPS(uint16_t, double) 1339 DECLARE_ALL_VECTOR_COERCE_OPS(uint16_t, long 1351 DECLARE_ALL_VECTOR_COERCE_OPS(uint16_t, long_double) 1340 1352 1341 1353 DECLARE_ALL_VECTOR_COERCE_OPS(int32_t, uint32_t) … … 1344 1356 DECLARE_ALL_VECTOR_COERCE_OPS(int32_t, float) 1345 1357 DECLARE_ALL_VECTOR_COERCE_OPS(int32_t, double) 1346 DECLARE_ALL_VECTOR_COERCE_OPS(int32_t, long 1358 DECLARE_ALL_VECTOR_COERCE_OPS(int32_t, long_double) 1347 1359 1348 1360 DECLARE_ALL_VECTOR_COERCE_OPS(uint32_t, int64_t) … … 1350 1362 DECLARE_ALL_VECTOR_COERCE_OPS(uint32_t, float) 1351 1363 DECLARE_ALL_VECTOR_COERCE_OPS(uint32_t, double) 1352 DECLARE_ALL_VECTOR_COERCE_OPS(uint32_t, long 1364 DECLARE_ALL_VECTOR_COERCE_OPS(uint32_t, long_double) 1353 1365 1354 1366 DECLARE_ALL_VECTOR_COERCE_OPS(int64_t, uint64_t) 1355 1367 DECLARE_ALL_VECTOR_COERCE_OPS(int64_t, float) 1356 1368 DECLARE_ALL_VECTOR_COERCE_OPS(int64_t, double) 1357 DECLARE_ALL_VECTOR_COERCE_OPS(int64_t, long 1369 DECLARE_ALL_VECTOR_COERCE_OPS(int64_t, long_double) 1358 1370 1359 1371 DECLARE_ALL_VECTOR_COERCE_OPS(uint64_t, float) 1360 1372 DECLARE_ALL_VECTOR_COERCE_OPS(uint64_t, double) 1361 DECLARE_ALL_VECTOR_COERCE_OPS(uint64_t, long 1373 DECLARE_ALL_VECTOR_COERCE_OPS(uint64_t, long_double) 1362 1374 1363 1375 DECLARE_ALL_VECTOR_COERCE_OPS(float, double) 1364 DECLARE_ALL_VECTOR_COERCE_OPS(float, long 1365 1366 DECLARE_ALL_VECTOR_COERCE_OPS(double, long 1376 DECLARE_ALL_VECTOR_COERCE_OPS(float, long_double) 1377 1378 DECLARE_ALL_VECTOR_COERCE_OPS(double, long_double) 1367 1379 1368 1380 /* FIXME: vectors of "half" are deactivated for now, because they … … 1383 1395 DECLARE_ALL_VECTOR_COERCE_OPS(half, float) 1384 1396 DECLARE_ALL_VECTOR_COERCE_OPS(half, double) 1385 DECLARE_ALL_VECTOR_COERCE_OPS(half, long 1397 DECLARE_ALL_VECTOR_COERCE_OPS(half, long_double) 1386 1398 #endif 1387 1399 … … 1402 1414 DECLARE_ALL_VECTOR_COERCE_OPS(float, real) 1403 1415 DECLARE_ALL_VECTOR_COERCE_OPS(double, real) 1404 DECLARE_ALL_VECTOR_COERCE_OPS(long double, real) 1405 #endif 1416 DECLARE_ALL_VECTOR_COERCE_OPS(long_double, real) 1417 #endif 1418 1419 /* Activate all the namespaces that we created. Delaying this activation 1420 * reduces compilation times significantly. */ 1421 #define ACTIVATE_COERCE_NAMESPACES_INNER(tlow, thigh) \ 1422 namespace x##tlow##thigh {} \ 1423 namespace y##tlow##thigh {} \ 1424 using namespace x##tlow##thigh; \ 1425 using namespace y##tlow##thigh; 1426 1427 #define ACTIVATE_COERCE_NAMESPACES(tlow) \ 1428 namespace x##tlow {} \ 1429 using namespace x##tlow; \ 1430 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, int8_t) \ 1431 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, uint8_t) \ 1432 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, int16_t) \ 1433 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, uint16_t) \ 1434 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, int32_t) \ 1435 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, uint32_t) \ 1436 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, int64_t) \ 1437 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, uint64_t) \ 1438 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, half) \ 1439 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, float) \ 1440 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, double) \ 1441 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, long_double) \ 1442 ACTIVATE_COERCE_NAMESPACES_INNER(tlow, real) 1443 1444 ACTIVATE_COERCE_NAMESPACES(int8_t) 1445 ACTIVATE_COERCE_NAMESPACES(uint8_t) 1446 ACTIVATE_COERCE_NAMESPACES(int16_t) 1447 ACTIVATE_COERCE_NAMESPACES(uint16_t) 1448 ACTIVATE_COERCE_NAMESPACES(int32_t) 1449 ACTIVATE_COERCE_NAMESPACES(uint32_t) 1450 ACTIVATE_COERCE_NAMESPACES(int64_t) 1451 ACTIVATE_COERCE_NAMESPACES(uint64_t) 1452 ACTIVATE_COERCE_NAMESPACES(half) 1453 ACTIVATE_COERCE_NAMESPACES(float) 1454 ACTIVATE_COERCE_NAMESPACES(double) 1455 ACTIVATE_COERCE_NAMESPACES(long_double) 1456 ACTIVATE_COERCE_NAMESPACES(real) 1406 1457 1407 1458 #if defined __GNUC__ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
Note: See TracChangeset
for help on using the changeset viewer.