NetNewsWire/Frameworks/RSDatabase/Related Objects/RelatedObjectsMap.swift

45 lines
1.1 KiB
Swift
Raw Normal View History

2017-09-11 15:46:32 +02:00
//
// RelatedObjectsMap.swift
2017-09-11 15:46:32 +02:00
// RSDatabase
//
// Created by Brent Simmons on 9/10/17.
// Copyright © 2017 Ranchero Software, LLC. All rights reserved.
//
import Foundation
// Map objectID to [DatabaseObject] (related objects).
// Its used as the return value for DatabaseLookupTable.fetchRelatedObjects.
public struct RelatedObjectsMap {
2017-09-11 15:46:32 +02:00
private let dictionary: [String: [DatabaseObject]] // objectID: relatedObjects
init(relatedObjects: [DatabaseObject], relatedObjectIDsMap: RelatedObjectIDsMap) {
2017-09-11 15:46:32 +02:00
var d = [String: [DatabaseObject]]()
let relatedObjectsDictionary = relatedObjects.dictionary()
for objectID in relatedObjectIDsMap.objectIDs() {
2017-09-11 15:46:32 +02:00
if let relatedObjectIDs = relatedObjectIDsMap[objectID] {
let relatedObjects = relatedObjectIDs.compactMap{ relatedObjectsDictionary[$0] }
2017-09-11 15:46:32 +02:00
if !relatedObjects.isEmpty {
d[objectID] = relatedObjects
}
}
}
self.dictionary = d
}
public func objectIDs() -> Set<String> {
return Set(dictionary.keys)
}
public subscript(_ objectID: String) -> [DatabaseObject]? {
return dictionary[objectID]
2017-09-11 15:46:32 +02:00
}
}