     /// Represents a basic attribute with no value.  This is also the base class for all other
     /// attributes.
     ///
-    class Attribute: CustomReflectable {
+    class Attribute: CustomReflectable, Equatable, Hashable {
         let name: String
         
         // MARK: - CustomReflectable

        init(name: String) {
            self.name = name
        }
    }

    /// Represents an attribute with an generic string value.  This is useful for storing attributes
    /// that do have a value, which we don't know how to parse.  This is only meant as a mechanism


            super.init(name: name)
        }

        // MARK - Hashable

        override var hashValue: Int {
            return name.hashValue ^ value.hashValue
        }


        // MARK: - Equatable

        static func ==(lhs: StringAttribute, rhs: StringAttribute) -> Bool {
            return type(of: lhs) == type(of: rhs) && lhs.name == rhs.name && lhs.value == rhs.value
        }
    }
}
