@@ -232,6 +232,7 @@ private struct Float
232
232
233
233
private template FloatTraits (T) if (floatFormat! T == FloatFormat.Float)
234
234
{
235
+ enum DATASIZE = 4 ;
235
236
enum EXPONENT = 8 ;
236
237
enum MANTISSA = 23 ;
237
238
enum ZERO = Float(0 , 0 , 0 );
@@ -244,6 +245,7 @@ private template FloatTraits(T) if (floatFormat!T == FloatFormat.Float)
244
245
245
246
private template FloatTraits (T) if (floatFormat! T == FloatFormat.Double)
246
247
{
248
+ enum DATASIZE = 8 ;
247
249
enum EXPONENT = 11 ;
248
250
enum MANTISSA = 52 ;
249
251
enum ZERO = Float(0 , 0 , 0 );
@@ -256,6 +258,7 @@ private template FloatTraits(T) if (floatFormat!T == FloatFormat.Double)
256
258
257
259
private template FloatTraits (T) if (floatFormat! T == FloatFormat.Real80)
258
260
{
261
+ enum DATASIZE = 10 ;
259
262
enum EXPONENT = 15 ;
260
263
enum MANTISSA = 64 ;
261
264
enum ZERO = Float(0 , 0 , 0 );
@@ -268,6 +271,7 @@ private template FloatTraits(T) if (floatFormat!T == FloatFormat.Real80)
268
271
269
272
private template FloatTraits (T) if (floatFormat! T == FloatFormat.DoubleDouble) // Unsupported in CTFE
270
273
{
274
+ enum DATASIZE = 16 ;
271
275
enum EXPONENT = 11 ;
272
276
enum MANTISSA = 106 ;
273
277
enum ZERO = Float(0 , 0 , 0 );
@@ -280,6 +284,7 @@ private template FloatTraits(T) if (floatFormat!T == FloatFormat.DoubleDouble) /
280
284
281
285
private template FloatTraits (T) if (floatFormat! T == FloatFormat.Quadruple)
282
286
{
287
+ enum DATASIZE = 16 ;
283
288
enum EXPONENT = 15 ;
284
289
enum MANTISSA = 112 ;
285
290
enum ZERO = Float(0 , 0 , 0 );
@@ -567,6 +572,11 @@ template floatFormat(T) if (is(T:real) || is(T:ireal))
567
572
568
573
}
569
574
575
+ package template floatSize(T) if (is (T:real ) || is (T:ireal ))
576
+ {
577
+ enum floatSize = FloatTraits! (T).DATASIZE ;
578
+ }
579
+
570
580
// all toUbyte functions must be evaluable at compile time
571
581
@trusted pure nothrow @nogc
572
582
const (ubyte )[] toUbyte (T)(const T[] arr) if (T.sizeof == 1 )
0 commit comments