55#nullable enable
66namespace TorchSharp
77{
8+ /// <summary>
9+ /// Represents a leak detector for Scalar.
10+ /// </summary>
11+ public static partial class ScalarLeakDetector
12+ {
13+ /// <summary>
14+ /// Allows implicit conversion from a .NET scalar value to Scalar.<br/>
15+ /// FIXME: Declared true for default to be compatible to 0.105.1 or earlier.
16+ /// </summary>
17+ public static bool allowImplicitConversionOperator { get ; set ; } = true ;
18+ /// <summary>
19+ /// Throws an exception if implicit conversion is not allowed.
20+ /// </summary>
21+ /// <exception cref="InvalidCastException"></exception>
22+ public static void ThrowIfImplicitConversionNotAllowed ( )
23+ {
24+ if ( ! allowImplicitConversionOperator )
25+ {
26+ throw new InvalidCastException ( "Unexpected implicit conversion to Scalar." ) ;
27+ }
28+ }
29+ }
830 /// <summary>
931 /// Represents a dynamically typed scalar value to the LibTorch runtime.
1032 /// </summary>
@@ -31,6 +53,7 @@ internal Scalar(IntPtr handle)
3153 /// <param name="value">The scalar value.</param>
3254 public static implicit operator Scalar ( byte value )
3355 {
56+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
3457 return value . ToScalar ( ) ;
3558 }
3659
@@ -40,6 +63,7 @@ public static implicit operator Scalar(byte value)
4063 /// <param name="value">The scalar value.</param>
4164 public static implicit operator Scalar ( sbyte value )
4265 {
66+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
4367 return value . ToScalar ( ) ;
4468 }
4569
@@ -49,6 +73,7 @@ public static implicit operator Scalar(sbyte value)
4973 /// <param name="value">The scalar value.</param>
5074 public static implicit operator Scalar ( short value )
5175 {
76+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
5277 return value . ToScalar ( ) ;
5378 }
5479
@@ -58,6 +83,7 @@ public static implicit operator Scalar(short value)
5883 /// <param name="value">The scalar value.</param>
5984 public static implicit operator Scalar ( int value )
6085 {
86+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
6187 return value . ToScalar ( ) ;
6288 }
6389
@@ -67,6 +93,7 @@ public static implicit operator Scalar(int value)
6793 /// <param name="value">The scalar value.</param>
6894 public static implicit operator Scalar ( long value )
6995 {
96+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
7097 return value . ToScalar ( ) ;
7198 }
7299
@@ -77,6 +104,7 @@ public static implicit operator Scalar(long value)
77104 /// <param name="value">The scalar value.</param>
78105 public static implicit operator Scalar ( Half value )
79106 {
107+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
80108 return value . ToScalar ( ) ;
81109 }
82110#endif
@@ -87,6 +115,7 @@ public static implicit operator Scalar(Half value)
87115 /// <param name="value">The scalar value.</param>
88116 public static implicit operator Scalar ( float value )
89117 {
118+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
90119 return value . ToScalar ( ) ;
91120 }
92121
@@ -96,6 +125,7 @@ public static implicit operator Scalar(float value)
96125 /// <param name="value">The scalar value.</param>
97126 public static implicit operator Scalar ( double value )
98127 {
128+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
99129 return value . ToScalar ( ) ;
100130 }
101131
@@ -105,6 +135,7 @@ public static implicit operator Scalar(double value)
105135 /// <param name="value">The scalar value.</param>
106136 public static implicit operator Scalar ( bool value )
107137 {
138+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
108139 return value . ToScalar ( ) ;
109140 }
110141
@@ -114,6 +145,7 @@ public static implicit operator Scalar(bool value)
114145 /// <param name="value">The scalar value.</param>
115146 public static implicit operator Scalar ( ( float , float ) value )
116147 {
148+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
117149 return value . ToScalar ( ) ;
118150 }
119151
@@ -123,6 +155,7 @@ public static implicit operator Scalar((float, float) value)
123155 /// <param name="value">The scalar value.</param>
124156 public static implicit operator Scalar ( System . Numerics . Complex value )
125157 {
158+ ScalarLeakDetector . ThrowIfImplicitConversionNotAllowed ( ) ;
126159 return value . ToScalar ( ) ;
127160 }
128161
0 commit comments