@@ -15,6 +15,7 @@ public class Models: Documentable, Codable {
1515 case documentation
1616 case classes
1717 case enums
18+ case externals
1819 }
1920
2021 // MARK: Properties
@@ -23,11 +24,13 @@ public class Models: Documentable, Codable {
2324
2425 public private( set) var classes : [ UUID : Class ]
2526 public private( set) var enums : [ UUID : Enum ]
27+ public private( set) var externals : [ UUID : External ]
2628
2729 public internal( set) weak var project : Project ? = nil {
2830 didSet {
2931 self . classes. values. forEach { $0. project = self . project }
3032 self . enums. values. forEach { $0. project = self . project }
33+ self . externals. values. forEach { $0. project = self . project }
3134 }
3235 }
3336
@@ -36,6 +39,7 @@ public class Models: Documentable, Codable {
3639 public init ( ) {
3740 self . classes = [ : ]
3841 self . enums = [ : ]
42+ self . externals = [ : ]
3943 }
4044
4145 // MARK: Objects
@@ -47,20 +51,24 @@ public class Models: Documentable, Codable {
4751 if let en = self . enums [ uuid] {
4852 return en
4953 }
50- return nil
54+ return self . externals [ uuid ]
5155 }
5256
5357 public func findObject( name: String ) -> Object ? {
5458 if let c = self . findClass ( name: name) {
5559 return c
5660 }
57- return self . findEnum ( name: name)
61+ if let e = self . findEnum ( name: name) {
62+ return e
63+ }
64+ return self . findExternal ( name: name)
5865 }
5966
6067 public func searchObjects( matching: String ) -> [ Object ] {
6168 var objects : [ Object ] = [ ]
6269 objects += self . searchClasses ( matching: matching) as [ Object ]
6370 objects += self . searchEnums ( matching: matching) as [ Object ]
71+ objects += self . searchExternals ( matching: matching) as [ Object ]
6472 return objects
6573 }
6674
@@ -123,4 +131,32 @@ public class Models: Documentable, Codable {
123131 public func searchEnums( matching: String ) -> [ Enum ] {
124132 return self . enums. values. filter { $0. name. range ( of: matching, options: . caseInsensitive) != nil }
125133 }
134+
135+ // MARK: External
136+
137+ @discardableResult
138+ public func addExternal( _ newExternal: External ) -> Bool {
139+ guard self . externals [ newExternal. id] == nil else {
140+ return false
141+ }
142+ self . externals [ newExternal. id] = newExternal
143+ return true
144+ }
145+
146+ @discardableResult
147+ public func removeExternal( uuid: UUID ) -> Bool {
148+ guard self . externals [ uuid] != nil else {
149+ return false
150+ }
151+ self . externals [ uuid] = nil
152+ return true
153+ }
154+
155+ public func findExternal( name: String ) -> External ? {
156+ return self . externals. first { $0. value. name == name } ? . value
157+ }
158+
159+ public func searchExternals( matching: String ) -> [ External ] {
160+ return self . externals. values. filter { $0. name. range ( of: matching, options: . caseInsensitive) != nil }
161+ }
126162}
0 commit comments