/runtime/typeinfo/ti_array_creal.d

http://github.com/wilkie/djehuty · D · 95 lines · 69 code · 20 blank · 6 comment · 12 complexity · bce0d5c6c0558885fcca6ad3d7d9b313 MD5 · raw file

  1. /*
  2. * ti_array_creal.d
  3. *
  4. * This module implements the TypeInfo for a creal[]
  5. *
  6. */
  7. module runtime.typeinfo.ti_array_creal;
  8. import runtime.typeinfo.ti_creal;
  9. class TypeInfo_Ac : TypeInfo {
  10. char[] toString() {
  11. return "creal[]";
  12. }
  13. hash_t getHash(void *p) {
  14. creal[] s = *cast(creal[]*)p;
  15. size_t len = s.length;
  16. creal *str = s.ptr;
  17. hash_t hash = 0;
  18. while (len) {
  19. hash *= 9;
  20. hash += (cast(uint *)str)[0];
  21. hash += (cast(uint *)str)[1];
  22. hash += (cast(uint *)str)[2];
  23. hash += (cast(uint *)str)[3];
  24. hash += (cast(uint *)str)[4];
  25. str++;
  26. len--;
  27. }
  28. return hash;
  29. }
  30. int equals(void *p1, void *p2) {
  31. creal[] s1 = *cast(creal[]*)p1;
  32. creal[] s2 = *cast(creal[]*)p2;
  33. size_t len = s1.length;
  34. if (len != s2.length) {
  35. return 0;
  36. }
  37. for (size_t u = 0; u < len; u++) {
  38. int c = TypeInfo_c._equals(s1[u], s2[u]);
  39. if (c == 0) {
  40. return 0;
  41. }
  42. }
  43. return 1;
  44. }
  45. int compare(void *p1, void *p2) {
  46. creal[] s1 = *cast(creal[]*)p1;
  47. creal[] s2 = *cast(creal[]*)p2;
  48. size_t len = s1.length;
  49. if (s2.length < len) {
  50. len = s2.length;
  51. }
  52. for (size_t u = 0; u < len; u++) {
  53. int c = TypeInfo_c._compare(s1[u], s2[u]);
  54. if (c) {
  55. return c;
  56. }
  57. }
  58. if (s1.length < s2.length) {
  59. return -1;
  60. }
  61. else if (s1.length > s2.length) {
  62. return 1;
  63. }
  64. return 0;
  65. }
  66. size_t tsize() {
  67. return (creal[]).sizeof;
  68. }
  69. uint flags() {
  70. return 1;
  71. }
  72. TypeInfo next() {
  73. return typeid(creal);
  74. }
  75. }