/runtime/typeinfo/ti_real.d
http://github.com/wilkie/djehuty · D · 63 lines · 43 code · 13 blank · 7 comment · 7 complexity · 63f2ca5cb66302315f6a9182cbddb008 MD5 · raw file
- /*
- * ti_real.d
- *
- * This module implements the TypeInfo for the real type.
- *
- */
- module runtime.typeinfo.ti_real;
- import runtime.util;
- class TypeInfo_e : TypeInfo {
- char[] toString() { return "real"; }
- hash_t getHash(void *p) {
- return (cast(uint *)p)[0] + (cast(uint *)p)[1] + (cast(ushort *)p)[4];
- }
- int equals(void *p1, void *p2) {
- return _equals(*cast(real *)p1, *cast(real *)p2);
- }
- int compare(void *p1, void *p2) {
- return _compare(*cast(real *)p1, *cast(real *)p2);
- }
- size_t tsize() {
- return real.sizeof;
- }
- void swap(void *p1, void *p2) {
- real t;
- t = *cast(real *)p1;
- *cast(real *)p1 = *cast(real *)p2;
- *cast(real *)p2 = t;
- }
- void[] init() {
- static real r;
- return (cast(real *)&r)[0 .. 1];
- }
- package:
- static int _equals(real f1, real f2) {
- return f1 == f2 || (isnan(f1) && isnan(f2));
- }
- static int _compare(real d1, real d2) {
- // if either are NaN
- if (d1 !<>= d2) {
- if (isnan(d1)) {
- if (isnan(d2)) {
- return 0;
- }
- return -1;
- }
- return 1;
- }
- return (d1 == d2) ? 0 : ((d1 < d2) ? -1 : 1);
- }
- }