PageRenderTime 49ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Examples/test-suite/csharp/director_classes_runme.cs

#
C# | 180 lines | 100 code | 21 blank | 59 comment | 35 complexity | 2fe63b0472da0b9c75b03c9fc2824c9d MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /*
  2. This test demonstrates director classes when the types are classes.
  3. Shown are virtual function calls which use classes passed by:
  4. - Value
  5. - Reference
  6. - Pointer
  7. as both parameters and return values.
  8. The test also demonstrates directors used with:
  9. - method overloading
  10. - default parameters
  11. Note: Methods with default parameters that call up from C++ cannot call
  12. the overloaded C# methods, see DefaultParms method.
  13. Expected output if PrintDebug enabled:
  14. ------------ Start ------------
  15. Base - Val(444.555)
  16. Base - Ref(444.555)
  17. Base - Ptr(444.555)
  18. Base - FullyOverloaded(int 10)
  19. Base - FullyOverloaded(bool 1)
  20. Base - SemiOverloaded(int -678)
  21. Base - SemiOverloaded(bool 1)
  22. Base - DefaultParms(10, 2.2)
  23. Base - DefaultParms(10, 1.1)
  24. --------------------------------
  25. Derived - Val(444.555)
  26. Derived - Ref(444.555)
  27. Derived - Ptr(444.555)
  28. Derived - FullyOverloaded(int 10)
  29. Derived - FullyOverloaded(bool 1)
  30. Derived - SemiOverloaded(int -678)
  31. Base - SemiOverloaded(bool 1)
  32. Derived - DefaultParms(10, 2.2)
  33. Derived - DefaultParms(10, 1.1)
  34. --------------------------------
  35. CSharpDerived - Val(444.555)
  36. CSharpDerived - Ref(444.555)
  37. CSharpDerived - Ptr(444.555)
  38. CSharpDerived - FullyOverloaded(int 10)
  39. CSharpDerived - FullyOverloaded(bool True)
  40. CSharpDerived - SemiOverloaded(-678)
  41. Base - SemiOverloaded(bool 1)
  42. CSharpDerived - DefaultParms(10, 2.2)
  43. CSharpDerived - DefaultParms(10, 1.1)
  44. ------------ Finish ------------
  45. */
  46. using System;
  47. namespace director_classesNamespace {
  48. public class runme
  49. {
  50. static void Main()
  51. {
  52. runme r = new runme();
  53. r.run();
  54. }
  55. void run()
  56. {
  57. if (director_classes.PrintDebug) Console.WriteLine("------------ Start ------------ ");
  58. Caller myCaller = new Caller();
  59. // test C++ base class
  60. using (Base myBase = new Base(100.0))
  61. {
  62. makeCalls(myCaller, myBase);
  63. }
  64. if (director_classes.PrintDebug) Console.WriteLine("--------------------------------");
  65. // test vanilla C++ wrapped derived class
  66. using (Base myBase = new Derived(200.0))
  67. {
  68. makeCalls(myCaller, myBase);
  69. }
  70. if (director_classes.PrintDebug) Console.WriteLine("--------------------------------");
  71. // test director / C# derived class
  72. using (Base myBase = new CSharpDerived(300.0))
  73. {
  74. makeCalls(myCaller, myBase);
  75. }
  76. if (director_classes.PrintDebug) Console.WriteLine("------------ Finish ------------ ");
  77. }
  78. void makeCalls(Caller myCaller, Base myBase)
  79. {
  80. string NAMESPACE = "director_classesNamespace.";
  81. myCaller.set(myBase);
  82. DoubleHolder dh = new DoubleHolder(444.555);
  83. // Class pointer, reference and pass by value tests
  84. if (myCaller.ValCall(dh).val != dh.val) throw new Exception("failed");
  85. if (myCaller.RefCall(dh).val != dh.val) throw new Exception("failed");
  86. if (myCaller.PtrCall(dh).val != dh.val) throw new Exception("failed");
  87. // Fully overloaded method test (all methods in base class are overloaded)
  88. if (NAMESPACE + myCaller.FullyOverloadedCall(10) != myBase.GetType() + "::FullyOverloaded(int)") throw new Exception("failed");
  89. if (NAMESPACE + myCaller.FullyOverloadedCall(true) != myBase.GetType() + "::FullyOverloaded(bool)") throw new Exception("failed");
  90. // Semi overloaded method test (some methods in base class are overloaded)
  91. if (NAMESPACE + myCaller.SemiOverloadedCall(-678) != myBase.GetType() + "::SemiOverloaded(int)") throw new Exception("failed");
  92. if (myCaller.SemiOverloadedCall(true) != "Base" + "::SemiOverloaded(bool)") throw new Exception("failed");
  93. // Default parameters methods test
  94. if (NAMESPACE + myCaller.DefaultParmsCall(10, 2.2) != myBase.GetType() + "::DefaultParms(int, double)") throw new Exception("failed");
  95. if (myBase.GetType() == typeof(CSharpDerived)) { // special handling for C# derived classes, there is no way to do this any other way
  96. if (NAMESPACE + myCaller.DefaultParmsCall(10) != myBase.GetType() + "::DefaultParms(int, double)") throw new Exception("failed");
  97. } else {
  98. if (NAMESPACE + myCaller.DefaultParmsCall(10) != myBase.GetType() + "::DefaultParms(int)") throw new Exception("failed");
  99. }
  100. myCaller.reset();
  101. }
  102. }
  103. public class CSharpDerived : Base
  104. {
  105. public CSharpDerived(double dd)
  106. : base(dd)
  107. {
  108. }
  109. public override DoubleHolder Val(DoubleHolder x)
  110. {
  111. if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - Val({0})", x.val);
  112. return x;
  113. }
  114. public override DoubleHolder Ref(DoubleHolder x)
  115. {
  116. if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - Ref({0})", x.val);
  117. return x;
  118. }
  119. public override DoubleHolder Ptr(DoubleHolder x)
  120. {
  121. if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - Ptr({0})", x.val);
  122. return x;
  123. }
  124. public override String FullyOverloaded(int x)
  125. {
  126. if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - FullyOverloaded(int {0})", x);
  127. return "CSharpDerived::FullyOverloaded(int)";
  128. }
  129. public override String FullyOverloaded(bool x)
  130. {
  131. if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - FullyOverloaded(bool {0})", x);
  132. return "CSharpDerived::FullyOverloaded(bool)";
  133. }
  134. // Note no SemiOverloaded(bool x) method
  135. public override String SemiOverloaded(int x)
  136. {
  137. String ret = "CSharpDerived::SemiOverloaded(int)";
  138. if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - SemiOverloaded({0})", x);
  139. return ret;
  140. }
  141. public override String DefaultParms(int x, double y)
  142. {
  143. String ret = "CSharpDerived::DefaultParms(int, double)";
  144. if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - DefaultParms({0}, {1})", x, y);
  145. return ret;
  146. }
  147. // Note the following method can never be called from unmanaged code.
  148. // It is here only for code that calls it directly from managed code.
  149. // But should always be defined to ensure behaviour is consistent
  150. // independent of where DefaultParsms is called from (managed or unmanaged code).
  151. // Note this method can never be called from unmanaged code
  152. public override String DefaultParms(int x)
  153. {
  154. if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - DefaultParms({0})", x);
  155. return DefaultParms(x, 1.1/*use C++ default here*/);
  156. }
  157. }
  158. }