     case Top(UIView?)
     case Bottom(UIView?)
     case VCenter(UIView?)
+    
+    func insetValue(layouts:[UIView: CGRect]) -> CGFloat {
+        switch self {
+        case .Parent:
+            return 0
+        case .Top(let v):
+            return v.flatMap { layouts[$0]?.origin.y } ?? 0
+        case .Bottom(let v):
+            return v.flatMap { layouts[$0].flatMap { $0.origin.y + $0.size.height }  } ?? 0
+        case .VCenter(let v):
+            return v.flatMap { layouts[$0].flatMap { $0.origin.y + $0.size.height/2 }  } ?? 0
+        }
+    }
 }
 
 public struct Viewport {

}


//MARK: vanchor

public enum VAnchor : Anchor {
    case Top(UIView?, CGFloat)

    return NoLayoutOperation()
}

//MARK: - Combine

private struct CombineOperation : LayoutOperation {
    
    let layoutOperations: [LayoutOperation]
    
