     
 }
 
-public class QuadTree: PointsContainer {
+public class QuadTree: AnnotationsContainer {
     
     let root: QuadTreeNode
     

    }
    
    struct Children: Sequence {
        let leftTop: QuadTreeNode
        let leftBottom: QuadTreeNode
        let rightTop: QuadTreeNode
        let rightBottom: QuadTreeNode
        
        init(parentNode: QuadTreeNode) {
            leftTop = QuadTreeNode(rect: parentNode.rect.leftTopRect)
            leftBottom = QuadTreeNode(rect: parentNode.rect.leftBottomRect)
            rightTop = QuadTreeNode(rect: parentNode.rect.rightTopRect)
            rightBottom = QuadTreeNode(rect: parentNode.rect.rightBottomRect)
        }
        
        struct ChildrenIterator: IteratorProtocol {

        }
    }
    
    func annotations(in rect: MKMapRect) -> [MKAnnotation] {
        
        // if the node's rect and the given rect don't intersect, return an empty array,
        // because there can't be any points that lie the node's (or its children's) rect and
        // in the given rect
        if !self.rect.intersects(rect) {
            return []
        }
        
        var result = [MKAnnotation]()
        
        // collect the node's points that lie in the rect
        for annotation in annotations {
            if rect.contains(annotation.coordinate) {
                result.append(annotation)
            }
        }
        
