Skip to content

Commit 4cc874a

Browse files
committed
Reduced code duplication in NumberGen.
1 parent 4dd1efb commit 4cc874a

1 file changed

Lines changed: 15 additions & 35 deletions

File tree

ngc/NumberGen.fs

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(* Copyright (C) 2011-2012 by ForNeVeR, Hagane
1+
(* Copyright (C) 2011-2013 by ForNeVeR, Hagane
22
33
Permission is hereby granted, free of charge, to any person obtaining a copy
44
of this software and associated documentation files (the "Software"), to deal
@@ -24,47 +24,27 @@ open System
2424
open System.Reflection
2525
open System.Reflection.Emit
2626

27-
type NumberGen() =
27+
type NumberGen<'TNumber>() =
2828
interface IGenerator with
2929
member this.Generate _ = failwith "Failure: Tried to generate unreified number constant.\n"
30-
member this.ReturnTypes () = failwithf "Failure: Tried to infer type of unreified numeric constant.\n"
30+
member this.ReturnTypes () = [typeof<'TNumber>]
3131

3232
type Int32Gen(number: Int32) =
33-
class
34-
inherit NumberGen()
35-
interface IGenerator with
36-
member this.Generate ilGen =
37-
ilGen.Emit(OpCodes.Ldc_I4,number)
38-
member this.ReturnTypes () =
39-
[typeof<Int32>]
40-
end
33+
inherit NumberGen<Int32>()
34+
interface IGenerator with
35+
member this.Generate ilGen = ilGen.Emit(OpCodes.Ldc_I4, number)
4136

4237
type Int64Gen(number: Int64) =
43-
class
44-
inherit NumberGen()
45-
interface IGenerator with
46-
member this.Generate ilGen =
47-
ilGen.Emit(OpCodes.Ldc_I8,number)
48-
member this.ReturnTypes () =
49-
[typeof<Int64>]
50-
end
38+
inherit NumberGen<Int64>()
39+
interface IGenerator with
40+
member this.Generate ilGen = ilGen.Emit(OpCodes.Ldc_I8, number)
5141

5242
type SingleGen(number: Single) =
53-
class
54-
inherit NumberGen()
55-
interface IGenerator with
56-
member this.Generate ilGen =
57-
ilGen.Emit(OpCodes.Ldc_R4,number)
58-
member this.ReturnTypes () =
59-
[typeof<Single>]
60-
end
43+
inherit NumberGen<Single>()
44+
interface IGenerator with
45+
member this.Generate ilGen = ilGen.Emit(OpCodes.Ldc_R4, number)
6146

6247
type DoubleGen(number: Double) =
63-
class
64-
inherit NumberGen()
65-
interface IGenerator with
66-
member this.Generate ilGen =
67-
ilGen.Emit(OpCodes.Ldc_R8,number)
68-
member this.ReturnTypes () =
69-
[typeof<Single>]
70-
end
48+
inherit NumberGen<Double>()
49+
interface IGenerator with
50+
member this.Generate ilGen = ilGen.Emit(OpCodes.Ldc_R8, number)

0 commit comments

Comments
 (0)