Cleaning.
[master-thesis.git] / Parasitemia / ParasitemiaCore / Types.fs
index 8a3bd4f..946c2c7 100644 (file)
@@ -2,12 +2,15 @@
 
 open System
 open System.Drawing
+open System.Collections.Generic
 
 open Emgu.CV
 open Emgu.CV.Structure
 
 open Const
 
+type Points = HashSet<Point>
+
 type Ellipse (cx: float32, cy: float32, a: float32, b: float32, alpha: float32) =
     member this.Cx = cx
     member this.Cy = cy
@@ -16,7 +19,7 @@ type Ellipse (cx: float32, cy: float32, a: float32, b: float32, alpha: float32)
     member this.Alpha = alpha
     member this.Area = a * b * PI
 
-    // Does the ellipse contain the point (x, y)?.
+    // Does the ellipse contain the point (x, y)?
     member this.Contains x y =
         ((x - cx) * cos alpha + (y - cy) * sin alpha) ** 2.f / a ** 2.f + ((x - cx) * sin alpha - (y - cy) * cos alpha) ** 2.f / b ** 2.f <= 1.f
 
@@ -32,7 +35,7 @@ type Ellipse (cx: float32, cy: float32, a: float32, b: float32, alpha: float32)
         this.CutAVericalLine 0.f || this.CutAVericalLine width ||
         this.CutAnHorizontalLine 0.f || this.CutAnHorizontalLine height
 
-    member this.Scale (factor: float32) =
+    member this.Scale (factor: float32) : Ellipse =
         Ellipse(this.Cx, this.Cy, this.A * factor, this.B * factor, alpha)
 
     // Approximation of Ramanujan.
@@ -55,10 +58,32 @@ type Cell = {
 type Line (a: float32, b: float32) =
     member this.A = a
     member this.B = b
-    member this.Valid = not (Single.IsInfinity this.A)
 
-[<Struct>]
-type PointF (x: float32, y: float32) =
-    member this.X = x
-    member this.Y = y
+type MaybeBuilder () =
+    member this.Bind (x, f) =
+        match x with
+        | None -> None
+        | Some a -> f a
+
+    member this.ReturnFrom (x) = x
+
+    member this.TryFinally (body, compensation) =
+        try
+            this.ReturnFrom(body())
+        finally
+            compensation()
+
+    member this.Using (disposable: 'a when 'a :> IDisposable, body) =
+        let body' = fun () -> body disposable
+        this.TryFinally(body', fun () ->
+            match disposable with
+            | null -> ()
+            | disp -> disp.Dispose())
+
+    member this.Zero () =
+        None
+
+    member this.Return (x) =
+        Some x
 
+let maybe = MaybeBuilder()
\ No newline at end of file