/runtime/typeinfo/ti_cfloat.d

http://github.com/wilkie/djehuty · D · 70 lines · 50 code · 14 blank · 6 comment · 9 complexity · 0bf853ac45ff85369274f0bbce20452d MD5 · raw file

  1. /*
  2. * ti_cfloat.d
  3. *
  4. * This module implements the TypeInfo for the cfloat type.
  5. *
  6. */
  7. module runtime.typeinfo.ti_cfloat;
  8. class TypeInfo_q : TypeInfo {
  9. char[] toString() {
  10. return "cfloat";
  11. }
  12. hash_t getHash(void *p) {
  13. return (cast(uint *)p)[0] + (cast(uint *)p)[1];
  14. }
  15. static int _equals(cfloat f1, cfloat f2) {
  16. return f1 == f2;
  17. }
  18. static int _compare(cfloat f1, cfloat f2) {
  19. int result;
  20. if (f1.re < f2.re) {
  21. result = -1;
  22. }
  23. else if (f1.re > f2.re) {
  24. result = 1;
  25. }
  26. else if (f1.im < f2.im) {
  27. result = -1;
  28. }
  29. else if (f1.im > f2.im) {
  30. result = 1;
  31. }
  32. else {
  33. result = 0;
  34. }
  35. return result;
  36. }
  37. int equals(void *p1, void *p2) {
  38. return _equals(*cast(cfloat *)p1, *cast(cfloat *)p2);
  39. }
  40. int compare(void *p1, void *p2) {
  41. return _compare(*cast(cfloat *)p1, *cast(cfloat *)p2);
  42. }
  43. size_t tsize() {
  44. return cfloat.sizeof;
  45. }
  46. void swap(void *p1, void *p2) {
  47. cfloat t;
  48. t = *cast(cfloat *)p1;
  49. *cast(cfloat *)p1 = *cast(cfloat *)p2;
  50. *cast(cfloat *)p2 = t;
  51. }
  52. void[] init() {
  53. static cfloat r;
  54. return (cast(cfloat *)&r)[0 .. 1];
  55. }
  56. }