     func generate() -> DictionaryGenerator<K,V> {
         return dictionary.generate()
     }
+    
+    /*
+    func flip() -> BiMap<V,K> {
+        return BiMap(self.dictionary,self.inverse)
+    }
+    */
 
     
 }

        return result
    }
    
    subscript (i: K) -> V? {
        get {
            return dictionary[i]



struct BiMap<K: Hashable, V: Hashable>: Sequence, Equatable  {
    var dictionary: [K:V]
    var inverse: [V:K]

    init() {
        dictionary = [:]
        inverse = [:]
    }
    
    // waiting for visibility modifiers to keep this private
    init(otherDictionary: [V:K], otherInverse: [K:V]) {
        dictionary = otherInverse
        inverse = otherDictionary
    }
    
    mutating func put(key: K, value: V) -> V? {
        let oldValueForKey = removeValueForKey(key)
        let oldKeyForvalue = removeKeyForValue(value)
