/examples/ct.d

http://github.com/baryluk/cords · D · 71 lines · 53 code · 14 blank · 4 comment · 0 complexity · 8424c624bc863ffd90d59ed98ceb0af3 MD5 · raw file

  1. module ct;
  2. import RBt : RB;
  3. class C {
  4. const int a;
  5. private const C b;
  6. this(int a_) {
  7. a = a_;
  8. b = null;
  9. }
  10. this(int a_, in const(C) b_) {
  11. a = a_;
  12. b = b_;
  13. }
  14. const(C) m() const {
  15. return b;
  16. }
  17. // const(C) opCast() {
  18. // return this;
  19. // }
  20. const(C) merge(in const(C) b2) const {
  21. return new C(a, b2);
  22. }
  23. }
  24. import std.stdio;
  25. alias RB!(const C) CC;
  26. CC CCC(int i) {
  27. return CC(new C(i));
  28. }
  29. CC CCC(int i, CC b) {
  30. return CC(new C(i, b.opDot()));
  31. }
  32. int something(in C a) {
  33. return a.a;
  34. }
  35. int something(CC a) {
  36. return something(a.opDot());
  37. }
  38. const(C) something2(in C a) {
  39. return a;
  40. }
  41. CC something2(CC a) {
  42. //return CC(something2(a.opDot()));
  43. return CC(something2(cast(const(C))a));
  44. }
  45. void main() {
  46. auto c1 = CCC(1);
  47. auto c2 = CCC(2, c1);
  48. CC c3 = CCC(2, c1);
  49. writefln("%d", c2.a);
  50. c2 = c2.m();
  51. writefln("%d", c2.a);
  52. writefln("%d", something(c2));
  53. CC c4 = something2(c3);
  54. c4 = c3.opDot();
  55. c4 = c3 = c2;
  56. c3 = c1.merge(c2.opDot());
  57. }